zoukankan      html  css  js  c++  java
  • fcntl 获取文件状态标志

    int fcntl(int fd,int cmd,...)

      函数fcntl提供了非常丰富的功能。主要依赖于cmd的各种参数:

    1. 复制已有的文件描述符 F_DUPFD,F_DUPFD_CLOEXEC
    2. 获取设置文件描述符的标志 F_GETFD,F_SETFD
    3. 获取设置文件状态标志 F_GETFL,F_SETFL
    4. 获取设置异步IO的所有权 F_GETOWN,F_SETFL
    5. 获取设置记录锁 F_GETLK,F_SETLK,F_SETLKW

      

      当cmd= F_GETFL时,fcntl的功能就是获取fd的文件状态的标志。和其他地方不同的是,这个返回的数值并不是每种标志各占二进制的一位。因为O_RDONLY,O_WRONLY,

    O_RDWR是互斥的状态。在处理返回值时,使用O_ACCMODE宏可以将fd文件的读写状态取出来。

      将O_RDONLY,O_WRONLY,O_RDWR,O_ACCMODE打印出来分别0,1,2,3,用3去位于0,1,2结果很明显。

    DEMO:

      

     1 #include <unistd.h>
     2 #include <fcntl.h>
     3 #include <stdlib.h>
     4 #include <stdio.h>
     5 
     6 int main(int argc,char** argv)
     7 {
     8     if(argc != 2)
     9         return -1;
    10     int fl =0;
    11     if((fl = fcntl(atoi(argv[1]),F_GETFL)) < 0) {
    12         printf("getfl failed.");
    13         exit(-1);
    14     }
    15 
    16     switch (fl & O_ACCMODE) {
    17         case O_RDONLY:
    18             printf("O_RDONLY
    ");
    19             break;
    20         case O_WRONLY:
    21             printf("O_WRONLY
    ");
    22             break;
    23         case O_RDWR:
    24             printf("O_RDWR
    ");
    25             break;
    26     }
    27 
    28     if(fl & O_APPEND)
    29         printf("O_APPEND
    ");
    30     if(fl & O_NONBLOCK)
    31         printf("O_NONBLOCK
    ");
    32     if(fl & O_SYNC)
    33         printf("O_SYNC
    ");
    34     if(fl & O_FSYNC)
    35         printf("O_FSYNC
    ");
    36 
    37 }

    结果:

      

      $a.out 0 < 1.c
    
      O_RDONLY
    
      $a.out 1>1.c
    
      $cat 1.c
    
      O_WRONLY
    
      $a.out 1 1>>1.c
    
      $cat 1.c
    
      O_WRONLY
    
      O_APPEND
    
      $a.out 2 2<>1.c
    
      O_RDWR

       上边使用重定向,0,1分别别重定向到文件。于是对fd GETFL就是对这个文件GETFL。

  • 相关阅读:
    我爱Java系列之---【SpringBoot打成war包部署】
    279. Perfect Squares
    矩阵dfs--走回路
    112. Path Sum
    542. 01 Matrix
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
    Invert Binary Tree
    563 Binary Tree Tilt
    145 Binary Tree Postorder Traversal
  • 原文地址:https://www.cnblogs.com/ittinybird/p/4461487.html
Copyright © 2011-2022 走看看