fcntl函数与整数常量O

xiaoxiao2025-08-06  14

这个宏作为一个掩码以与文件状态标识值做AND位运算,产生一个表示文件访问模式的值。这模式将是O_RDONLY, O_WRONLY, 或 O_RDWR(在GNU系统中,也可能是零,并且从不包括 O_EXEC 位)。

O_ACCMODE<0003>:读写文件操作时,用于取出flag的低2位 (val & O_ACCMODE)取出val的低2位(见下面程序) O_RDONLY<00>:只读打开 O_WRONLY<01>:只写打开 O_RDWR<02>:读写打开

Unix环境高级编程中P67、图3-11实例代码如下:

#include "apue.h" #include <fcntl.h> int main(int argc, char *argv[]) { int val; if (argc != 2) err_quit("usage: a.out <descriptor#>"); if ((val = fcntl(atoi(argv[1]), F_GETFL, 0)) < 0) err_sys("fcntl error for fd %d", atoi(argv[1])); switch (val & O_ACCMODE) { case O_RDONLY: printf("read only"); break; case O_WRONLY: printf("write only"); break; case O_RDWR: printf("read write"); break; default: err_dump("unknown access mode"); } if (val & O_APPEND) printf(", append"); if (val & O_NONBLOCK) printf(", nonblocking"); if (val & O_SYNC) printf(", synchronous writes"); #if !defined(_POSIX_C_SOURCE) && defined(O_FSYNC) && (O_FSYNC != O_SYNC) if (val & O_FSYNC) printf(", synchronous writes"); #endif putchar('\n'); exit(0); }

 

 

转载请注明原文地址: https://www.6miu.com/read-5034403.html

最新回复(0)