2 ly601579033 ly601579033 于 2014.12.18 14:47 提问

unix c中的fcntl函数fcntl(fd,F_GETFL,0)

看到书上有这句话(不懂):
F_GETFL 对应于filedes 的文件状态标志作为函数值返回。在说明 open函数时,已说明了文件状态标志 不幸的是,三个存取方式标志 (O_RDONLY,O_WRONLY,以及O_RDWR)并不各占1位。(正如前述,这三种标志的值各是 0、1和2,由于历史原因。这三种值互斥 — 一个文件只能有这三种值之一。 )因此首先必须用屏蔽字 O_ACCMODE相与 取得存取方式位,然后将结果与这三种值相比较。
fcntl(fd,F_GETFL,0)操作返回的结果是什么???
代码测试:返回不懂
/**
fcntl——manipulate(/məˈnɪpjʊleɪt;) file descriptor
**/

#include
#include
#include
#include
#include

int main(){

int fd;
int power;

if((fd = open("/home/hq/example/mydocs/linux",O_RDONLY | O_CREAT)) == -1){
    printf("open failed!\n");
    return 0;
}
//得到进程文件的描述符标志
if((power = fcntl(fd,F_GETFL,0)) ==-1){
    printf("fcntl failed!\n");
    return 0;
}
printf("%d--\n",power);

return 0;

}

1个回答

lxq_xsyu
lxq_xsyu   Rxr 2014.12.18 17:17
已采纳

fcntl()用来操作文件描述符的一些特性。fcntl 不仅可以施加建议性锁,还可以施加强制锁。同时,fcntl还能对文件的某一记录进行上锁,也就是记录锁。
cntl的返回值与命令有关。如果出错,所有命令都返回-1,如果成功则返回某个其他值。下列四个命令有特定返回值:F_DUPFD、F_GETFD、F_GETFL、F_GETOWN.第一个返回新的文件描述符,接下来的两个返回相应标志,最后一个返回一个正的进程ID或负的进程组ID。

ly601579033
ly601579033 恩,已经明白,谢谢~~
大约 3 年之前 回复
lxq_xsyu
lxq_xsyu 回复ly601579033: 这些都是宏定义
大约 3 年之前 回复
ly601579033
ly601579033 回复lxq_xsyu: 还是不明白,不是返回 文件的状态标志吗???就是O_RDONLY,O_WRONLY,以及O_RDWR一类的吗?就是一个数字??
大约 3 年之前 回复
lxq_xsyu
lxq_xsyu 回复ly601579033: 通俗点讲就是返回有没有结束或者出错
大约 3 年之前 回复
lxq_xsyu
lxq_xsyu 回复ly601579033: 如果设置为F_GETFL时候后面的0被忽略,然后会返回访问模式和状态
大约 3 年之前 回复
ly601579033
ly601579033 我先在纠结于F_GETFL返回值的问题啊,对于这个不太清楚
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!