我试图理解这行代码的含义:
flags = fcntl(-1,F_GETFL,0);
答案 0 :(得分:4)
使用F_GETFL
标记调用fcntl()
的通常原因是修改标记并使用fcntl()
和F_SETFL
进行设置;使用fcntl()
调用F_GETFL
的另一个原因是找出文件描述符的特征。您可以通过阅读(相当仔细地)有关<fcntl.h>
的信息来查找有关哪些标志可以操作的信息。标志包括:
Plus(POSIX 2008)O_ACCMODE,如果我正确读取引用的页面,则可用于区分O_RDONLY
,O_RDWR
和O_WRONLY
。
但是,使用fcntl()
等明确无效的文件描述符调用-1
毫无意义。所有发生的事情是函数返回-1
表示失败并将errno
设置为EBADF
(错误的文件描述符)。
答案 1 :(得分:3)
假设我们正在谈论man 2 fcntl
描述的功能:
flags = fcntl(-1,F_GETFL,0);
尝试对无效的文件描述符(-1
)执行某些操作,因此永远不会做任何其他事情,但会返回-1
并将errno
设置为{ {1}}。
我会说你可以通过以下方式保存替换此行:
EBADF
答案 2 :(得分:0)
fcntl()
函数对打开的描述符执行各种操作。它的语法是:
int fcntl(int descriptor,
int command,
...)
了解返回值:
-1
然后fcntl()
未成功。设置errno全局变量以指示错误。此代码:
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
int main(){
int flags;
if((flags = fcntl(-1,F_GETFL,0)) < 0){
perror("fcntl: ");
}
printf("\n %d\n", flags);
}
输出是:
~$ gcc xx.c
~$ ./a.out
fcntl: : Bad file descriptor
-1
请注意,打印的flags
值为-1
,表示fcntl(-1,F_GETFL,0);
未成功调用,因为-1
不是有效的文件描述符。 valid file descriptors从0
开始。 (即perror()
打印错误消息Bad file descriptor,EBADF)
注意:我在Linux系统中运行此代码。
修改强>:
F_GETFL
用于fcntl()中的GET标志命令。