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 ");

    }

  • 相关阅读:
    java中给集合快速取值最大值和最小值
    Mybatis.xml文件中大于小于等于
    Validate表单验证
    更新了svn 后,某个文件多了几个副本如:xxx.r1 xxx.r3 xxx.mine等,正常文件名xxx
    Oracle监听出现的问题总结,以及解决办法
    oracle三个网络配置文件(listener.ora、tnsname.ora、sqlnet.ora)的作用
    Lucene提供的条件判断查询
    Lucene 单域多条件查询
    lucene自定义过滤器
    luke使用
  • 原文地址:https://www.cnblogs.com/devil-91/p/3303489.html
Copyright © 2011-2022 走看看