• fcntl,F_GETFL,F_SETFL,flags


    1、获取文件的flags,即open函数的第二个参数:

       flags = fcntl(fd,F_GETFL,0);
    

    2、设置文件的flags:

      fcntl(fd,F_SETFL,flags);
    

    3、增加文件的某个flags,比如文件是阻塞的,想设置成非阻塞:

       flags = fcntl(fd,F_GETFL,0);
    
       flags |= O_NONBLOCK;
    
      fcntl(fd,F_SETFL,flags);
    

    4、取消文件的某个flags,比如文件是非阻塞的,想设置成为阻塞:

      flags = fcntl(fd,F_GETFL,0);
    
      flags &= ~O_NONBLOCK;
    
      fcntl(fd,F_SETFL,flags);
    

    获取和设置文件flags举例::

    
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include <error.h>
    
    char buf[500000];
    
    int main(int argc,char *argv[])
    {
            int ntowrite,nwrite;
            const char *ptr ;
            int flags;
        
            ntowrite = read(STDIN_FILENO,buf,sizeof(buf));
            if(ntowrite <0) 
            {   
                    perror("read STDIN_FILENO fail:");
                    exit(1);
            }   
            fprintf(stderr,"read %d bytes
    ",ntowrite);
        
            if((flags = fcntl(STDOUT_FILENO,F_GETFL,0))==-1)
            {   
                    perror("fcntl F_GETFL fail:");
                    exit(1);
            }   
            flags |= O_NONBLOCK;
            if(fcntl(STDOUT_FILENO,F_SETFL,flags)==-1)
            {   
                    perror("fcntl F_SETFL fail:");
                    exit(1);
            }   
        
            ptr = buf;
            while(ntowrite > 0)
            {   
                    nwrite = write(STDOUT_FILENO,ptr,ntowrite);
                    if(nwrite == -1) 
                    {  
    
                            perror("write file fail:");
                    }   
                    if(nwrite > 0)
                    {   
                            ptr += nwrite;
                            ntowrite -= nwrite;
                    }   
            }   
        
            flags &= ~O_NONBLOCK;
            if(fcntl(STDOUT_FILENO,F_SETFL,flags)==-1)
            {   
                    perror("fcntl F_SETFL fail2:");
            }   
            return 0;
    }
    
    
  • 相关阅读:
    bzoj3527: [Zjoi2014]力 fft
    bzoj3295: [Cqoi2011]动态逆序对 cdq分治
    快速读入fread
    km板子(二分图最大权匹配)
    spfa毒瘤算法
    牛客网暑期ACM多校训练营(第三场)DEncrypted String Matching fft
    P4173 残缺的字符串 fft
    圆和多边形交模板
    hdu多校2C
    Codeforces Round #449 (Div. 1)C
  • 原文地址:https://www.cnblogs.com/muahao/p/6055056.html
Copyright © 2020-2023  润新知