zoukankan      html  css  js  c++  java
  • fcntl()

     

    fcntl()

    F_GETFL
    ---------------------------------------------
            将文件状态标志作为函数值返回。

            文件状态标志:
            O_RDONLY        O_WRONLY        O_RDWR
            O_APPEND        O_NONBLOCK      O_SYNC FASYNC(O_ASYNC)
            三个存取方式标志(O_RDONLY, O_WRONLY, O_RDWR)是互斥的,一个文件只能有这三种值的其中一个。首选需要用屏蔽字O_ACCMODE取得存取方式位,然后将结果与这三个标志相比较。

           
    F_SETFL
    ---------------------------------------------
            将文件状态标志设置为第三个参数的值,可以更改的几个标志是:O_APPEND, O_NONBLOCK, O_SYNC, FASYNC(O_ASYNC)

    注:
            当一个打开的文件FASYNC标志变化时(调用fcntl()函数,设置FASYNC文件标志时),该文件所对应的设备驱动的fasync()接口将被调用。











    ---------------------------------------------
    #include <fcntl.h>
    #include <stdio.h>
    #include <stdlib.h>

    int main(int argc, char **argv)
    {
            int fd, val, accmode;
           
            if (argc != 2) {
                    printf("usage: ./a.out filename ");
                    return -1;
            }

            if ((fd = open(argv[1], O_RDWR)) < 0) {
                    perror("open error");
                    return -1;
            }

            if ((val = fcntl(fd, F_GETFL)) < 0) {
                    perror("fcntl error");
                    return -1;
            }

            accmode = val & O_ACCMODE;
            if      (accmode == O_RDONLY)   printf("read only ");
            else if (accmode == O_WRONLY)   printf("write only ");
            else if (accmode == O_RDWR)     printf("read write ");
            else                            printf("unknown access mode ");
           

            if ((val = fcntl(fd, F_SETFL, val | FASYNC | O_NONBLOCK)) < 0) {
                    perror("fcntl error");
                    return -1;
            }

            if ((val = fcntl(fd, F_GETFL)) < 0) {
                    perror("fcntl error");
                    return -1;
            }
           
            //if (val & O_ASYNC)
            if (val & FASYNC)
                    printf("async ");
            if (val & O_NONBLOCK)
                    printf("nonblocking ");

    }

  • 相关阅读:
    方维P2P  二次开发
    Array 数组去重 总结10方法(7)
    PHP  OOP学习总结
    [转载]js:数组里面获取键名和键值
    Array对象的方法实现(6)----Array.prototype.indexOf(实现常规参数的功能)
    在Apache服务器上启用GZip压缩静态内容的方法
    PHP 程序授权验证开发思路
    【转】zend studio中ctrl+鼠标左键无法转到类或函数定义文件的解决方法
    公钥私钥,HTTPS,CA证书机构,单向和双向认证
    Array对象的方法实现(5)----Array.prototype.includes(实现常规参数的功能)
  • 原文地址:https://www.cnblogs.com/devil-91/p/3303489.html
Copyright © 2011-2022 走看看