linux C复习:文件操作|(函数fcntl)

1、函数原型  

       #include <unistd.h>
       #include <fcntl.h>

       int fcntl(int fd, int cmd, ... /* arg */ );

       //fd:文件描述符

       //cmd对文件进行哪些操作,是一个宏

           1、F_DUPFD                                //文件描述符复制     //整体操作类似于dup2

    int fd = open("b.bat",O_CREAT|O_RDONLY);
    if( -1 == fd)
        perror("错误:"),exit(-1);
    dup2(fd,5);                 //文件描述符5被使用
    //指定一个文件描述符5,成功返回5,如果5被使用则返回一个没有被使用的最小的值失败返回-1
    int fd2 = fcntl(fd,F_DUPFD,5);  
    printf("%d\n",fd2);         //6

        2、F_GETFL获取文件状态标识符(get flag)

    //get file stat flag
    int flags = fcntl(fd,F_GETFL);
    printf("flags = %d\n",flags);

       输出为:0

      

      以下为文件的装状态标识符的值
      #define O_RDONLY      00
      #define O_WRONLY      01
      #define O_RDWR       02
      #define O_CREAT     0100 /* not fcntl */    //文件创建标识通过fcntl函数获取不到
      #define O_EXCL     0200 /* not fcntl */       //通过fcntl函数获取不到
      #define O_NOCTTY    0400 /* not fcntl */  //通过fcntl函数获取不到
      #define O_TRUNC    01000 /* not fcntl */  //通过fcntl函数获取不到
      #define O_APPEND   02000

      3、F_SETFL设置文件的状态标识(set flag)

      文件状态标识的设置只能对0_APPEND以及几个不常用的宏有效,

     F_SETFL对于O_RDONLY\O_WRONLY\O_RDWR无效

   int fd = open("a.txt",O_RDONLY|O_APPEND);
    int flags = fcntl(fd,F_GETFL);
        printf("flags = %d\n",flags);    //1025
        
    flags = O_RDWR;
    fcntl(fd,F_SETFL,flags);
    int fg = fcntl(fd,F_GETFL);
    printf("fg = %d\n",fg);                //1

       

 


 

 

 

      

         

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值