42_*_*huh 7 c unix sockets freebsd fcntl
我试图理解这行代码的含义:
flags = fcntl(-1,F_GETFL,0);
Run Code Online (Sandbox Code Playgroud)
该fcntl()函数对打开的描述符执行各种操作。其语法为:
int fcntl(int descriptor,
int command,
...)
Run Code Online (Sandbox Code Playgroud)
阅读有关返回值的信息:
-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);
}
Run Code Online (Sandbox Code Playgroud)
输出是:
~$ gcc xx.c
~$ ./a.out
fcntl: : Bad file descriptor
-1
Run Code Online (Sandbox Code Playgroud)
请注意,打印的 flags值-1表示调用未成功,fcntl(-1,F_GETFL,0); 因为-1不是有效的文件描述符。有效的文件描述符从0. (这就是perror()打印错误消息 Bad file detector , EBADF 的内容)
注意:我在Linux系统中运行此代码。
编辑:
F_GETFL用于 fcntl() 中的 GET flags 命令。