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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
fcntl F_SETFL F_GETFL
http://blog.sina.com.cn/s/blog_71bbf6e001017lpy.html 1、获取文件的flags,即open函数的第二个参数:        flags = fcntl(fd,F_GETFL,0); 2、设置文件的flags:       fcntl(fd,F_SETFL,flags); 3、增加文件的某个flags,比如文件是阻
3.14 fcntl函数(2)-利用F_GETFL参数值获取文件读写状态
fcntl函数可以改变已打开文件的性质。函数原型如下: #include int fcntl(int filedes, int cmd, ...); 当第二个参数cmd=F_GETFL时,它的作用是取得文件描述符filedes的文件状态标志。 当第二个参数cmd=F_SETFL时,它的作用是设置文件描述符filedes的文件状态标志,这时第三个参数为新的状态标志。 返回值
linux fcntl函数
fcntl 功能描述:根据文件描述来操作文件的特性。 #include #include int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock); 描述 fctl针对(文件)描述提供控制。fd是被参数cmd操作
fcntl函数的用法总结
fcntl函数功能 记录锁
用fcntl设定socket为非阻塞
第一部分-------------------------------------------------------------------------------------------------------------------How would I put my socket in non-blocking mode? From Andrew Gierth (andrew@erlens
对epoll总结
epoll是Linux特有的I/O复用函数(个人通过搜索资料和听老师讲解认为epoll相较于select和poll要更加优秀)。     epoll与poll和select的区别是他是用一组函数完成的任务而不是单个函数。     epoll把用户关心的文件描述符上面的事件放在内核里的一个时间表上,故epoll需要一个额外的文件描述符,来唯一标识这个时间表。      #include
3.14 fcntl函数(1)-利用参数F_DUPFD复制新文件描述符
fcntl函数可以改变已打开文件的性质。函数原型如下: #include int fcntl(int filedes, int cmd, ...); 当第二个参数cmd=F_DUPFD时,它的作用是根据filedes复制一个新文件描述符。此时,fcntl相当于dup和dup2函数。 第三个参数指出新复制的文件描述符是一个等于或大于该参数的可用文件描述符,且不能等于一个已有的文件
Linux网络编程--文件属性fcntl函数
/*使用fcntl控制文件符*/ #include <unistd.h> #include <fcntl.h> #include <stdio.h>int main(void) { int flags = -1; int accmode = -1; /*获得标准输入的状态的状态*/ flags = fcntl(0, F_GETFL, 0); if( flags <
高级套接字函数 fcntl 设置socket 非阻塞
status = fcntl (hand, option, mode ) ; 上述fcntl函数调用中,各参数定义如下:     handle:已打开的文件句柄。     option:一般可以是下列两种值:         F_GETFL:表示读取文件状态值。        F_SETFL:表示设置文件状态值。 (注意:F_GETFL和F_SETFL都被定义在
fcntl(fd, F_SETFD, FD_CLOEXEC);
如果FD_CLOEXEC的值是0,那么在调用exec相关函数后文件句柄保持打开; 否则的话,在成功调用exec相关函数后文件句柄将被关闭.