• 用fcntl()设置堵塞函数的堵塞性质


    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
    
    #define ERR_EXIT(m) 
        do { 
            perror(m);
            exit(EXIT_FAILURE);
        }while(0)
    
    void activate_nonblock(int fd);
    void deactivate_nonblock(int fd);
    
    int main(int argc, const char *argv[])
    {
        activate_nonblock(STDIN_FILENO);
        char buffer[1024] = {0};
        int ret = read(STDIN_FILENO, buffer, 1024);
        if(ret == -1)
            printf("read");
        return 0;
    }
    
    void activate_nonblock(int fd)
    {
        int ret;
        int flags = fcntl(fd, F_GETFL);
        if(flags == -1)
            ERR_EXIT("fcntl");
        flags |= O_NONBLOCK;
        ret = fcntl(fd, F_SETFL, flags);
        if(ret == -1)
            ERR_EXIT("fcntl");
    }
    
    void deactivate_nonblock(int fd)
    {
        int ret;
        int flags = fcntl(fd, F_GETFL);
        if(flags == -1)
            ERR_EXIT("fcntl");
        flags &=~O_NONBLOCK;
        ret = fcntl(fd, F_SETFL, flags);
        if(ret == -1)
            ERR_EXIT("fcntl");
    }

  • 相关阅读:
    ssh session 共享
    python 快速开启http服务
    GCC 默认头文件搜索路径
    GCC 部分单元测试编译失败
    随机森林与GBDT
    DecisionTree
    SVM
    KDDCUP CTR预测比赛总结
    剑指offer-java
    搜狗搜索日志传输与分析
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4246169.html
Copyright © 2020-2023  润新知