zoukankan      html  css  js  c++  java
  • linux编程fcntl获取和设置文件状态

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <fcntl.h>
    
    #define ERR_EXIT( m ) 
            do 
            { 
                    perror( m ); 
                    exit( EXIT_FAILURE ); 
            }while( 0 )
    
    //设置某个文件状态
    void set_flag( int fd, int flags );
    //清除某个文件状态
    void clear_flag( int fd, int flags );
    
    int main( int argc, char* argv[] ) {
    
            char buf[64] = { 0 };
            int nread;
    
            //设置非阻塞状态
            set_flag( 0, O_NONBLOCK );
            //清除非阻塞状态, 读取标准输入又变成阻塞
            clear_flag( 0, O_NONBLOCK );
            nread = read( 0, buf, 64 );
            if( -1 == nread ) {
                    ERR_EXIT( "获取输入失败" );
            }
            printf( "buf=%s
    ", buf );
    
            return 0;
    }
    
    void set_flag( int fd, int flags ) {
            int oldflag;
            oldflag = fcntl( fd, F_GETFL, 0 );
            if( -1 == oldflag ) {
                    ERR_EXIT( "获取原来的状态失败" );
            }
    
            oldflag = oldflag | flags;
            int ret = fcntl( fd, F_SETFL, oldflag );
            if( -1 == ret ) {
                    ERR_EXIT( "设置新的文件状态失败" );
            }
    }
    
    void clear_flag( int fd, int flags ) {
            int oldflag;
            oldflag = fcntl( fd, F_GETFL, 0 );
            if( -1 == oldflag ) {
                    ERR_EXIT( "获取原来的状态失败" );
            }
            oldflag = oldflag & ~flags;
            int ret = fcntl( fd, F_SETFL, oldflag );
            if( -1 == ret ) {
                    ERR_EXIT( "设置新的文件状态失败" );
            }
    }
    

      

  • 相关阅读:
    开灯问题
    独木舟上的旅行
    剑指offer--从尾到头打印链表
    映芬视觉网页练习
    游标的使用
    数据库操作
    关系型数据库
    数据库基础知识
    TCPSocket系列二
    HTML5新标签与css3选择器
  • 原文地址:https://www.cnblogs.com/ghostwu/p/10984615.html
Copyright © 2011-2022 走看看