文件控制操作
对一个打开的文件描述符执行一系列控制操作
-
#include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd, ... /* arg */ );
- 1.获取或修改其访问模式和状态标志 (flag
- 2.要获取这些设置 需要将fcntl 的 cmd参数设置成F_GETFL
- F_SETFL 设置flags 改变状态 或 模式
- 使用场景 文件不是由调用程序打开的 所以无法使用open() 系统调用来控制文件的状态标志。
- 文件描述符的获取时通过open ()以外的函数系统调用 如pipe() socket()等。
-
myfcntl.c+ � � �� buffers 1 #include <stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #include<sys/types.h> 5 #include<sys/stat.h> 6 #include<fcntl.h> 7 #include<unistd.h> 8 ✗ 9 int main(int argc,char* argv[]) 10 { 11 int flags; 12 int accessMode; 13 int fd = open(argv[1],O_RDWR); 14 flags = fcntl(fd,F_GETFL); 15 if(flags==-1) 16 { 17 perror("get error"); 18 exit(-1); 19 } 20 accessMode = flags& O_ACCMODE; 21 if(accessMode==O_RDWR||accessMode==O_WRONLY) 22 { 23 printf("file is writable;"); 24 } 25 flags|=O_APPEND; 26 flags = fcntl(fd,F_SETFL,flags); 27 printf("flags: %d",flags); 28 return 0; 29 } 30 ~