深入探究文件I/O fcntl()

文件控制操作

对一个打开的文件描述符执行一系列控制操作

 

  • #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>
        89 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
      ~

     

posted @ 2019-01-15 21:54  Lumi_Imp  阅读(168)  评论(0编辑  收藏  举报