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\n");
                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\n");
        else if (accmode == O_WRONLY)   printf("write only\n");
        else if (accmode == O_RDWR)     printf("read write\n");
        else                            printf("unknown access mode\n");

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\n");
        if (val & O_NONBLOCK)
                printf("nonblocking\n");

}

fcntl()的更多相关文章

  1. [APUE]不用fcntl实现dup2函数功能

    dup2的函数定义为: #include <unistd.h> int dup2(int src_fd, int new_fd); 自己实现dup2函数有几个关键点: 1,检查给定的源fd ...

  2. APUE中fcntl.h的使用及O_SYNC在Mac与Ubuntu下的测试

    此部分测试涉及到APUE V3中,第三章的图3-12到图3-14. 通过fcntl.h提供的功能,修改fd的文件属性,本处增加O_SYNC功能,并测试其效果. 本文涉及代码: tree ch3 ch3 ...

  3. APUE 习题3-2 实现dup2,要求不使用fcntl函数。

    int mydup2(int oldfd, int newfd) {     int tfd = 0;     if (newfd < 0)     {         err_sys(&quo ...

  4. fcntl函数

    很多时候,当我们有多个进程要访问同一个文件的时候,为了防止多进程访问导致的不一致,我们就要考虑进程间的同步问题. fcntl是一个很强大的函数,我们可以通过它给文件的某一部分上锁 int fcntl( ...

  5. Linux C fcntl()函数详解

    fcntl系统调用 功能描述:根据文件描述词来操作文件的特性. 用法: int fcntl(int fd, int cmd);  int fcntl(int fd, int cmd, long arg ...

  6. Linux文件(区域)锁函数 -- open()、fcntl()

    一.什么是文件锁定 对于锁这个字,大家一定不会陌生,因为我们生活中就存在着大量的锁,它们各个方面发挥着它的作用,现在世界中的锁的功能都可归结为一句话,就是阻止某些人做某些事,例如,门锁就是阻止除了屋主 ...

  7. sys/types.h fcntl.h unistd.h sys/stat.h

    sys/types.h 是Unix/Linux系统的基本系统数据类型的头文件,含有size_t,time_t,pid_t等类型. 在应用程序源文件中包含 <sys/types.h> 以访问 ...

  8. fcntl 获取文件状态标志

    int fcntl(int fd,int cmd,...) 函数fcntl提供了非常丰富的功能.主要依赖于cmd的各种参数: 复制已有的文件描述符 F_DUPFD,F_DUPFD_CLOEXEC 获取 ...

  9. linxu c语言 fcntl函数和flock函数区别 【转】

    flock和fcntl都有锁的功能,但他们还有一点小小的区别: 1.flock只能加全局锁,fcntl可以加全局锁也可以加局部锁. 2.当一个进程用flock给一个文件加锁时,用另一个进程再给这个文件 ...

  10. linxu fcntl 函数用法 【转】

    功能描述:根据文件描述词来操作文件的特性. 文件控制函数         fcntl -- file control 头文件: #include <fcntl.h>;          i ...

随机推荐

  1. C#变量命名规范

    1.1命名 1.  所有命名必须有意义 2.  成员变量声明在类的顶端,并且每个变量一行 3.  局部变量声明在引用之前 1.1.1  常量命名 1.  常量名用全大写:MAX_PARAMETER_C ...

  2. ubuntu下vpn无反应的解决办法

    mv ~/.gconf  ~/.gcongbk0 sudo reboot

  3. HBase 几点思考

    1. http://blog.csdn.net/yueyedeai/article/details/14648067 2. http://blog.csdn.net/pirateleo/article ...

  4. java.lang.Math类,方法学习笔记

    /**java.lang 包中的Math 类提供有常量 * 并包含有用于执行基本数学运算的 * 方法,如初等指数.对数.平方根 * 用于进行更高级的数学运算.由于 * 在Math 类的方法都是静态的, ...

  5. 基于Bresenham算法画圆

    bresenham算法画圆思想与上篇 bresenham算法画线段 思想是一致的 画圆x^2+y^2=R^2 将他分为8个部分,如上图 1. 只要画出1中1/8圆的圆周,剩下的就可以通过对称关系画出这 ...

  6. Android 5.0五大安全特性

    全盘加密(Full Disk Encryption, FDE) 对所有闪存数据加密.性能下降较大 Nexus 6,Nexus 9无法关闭FDE 对于其它设备.Google推荐开启 多用户支持 4.2中 ...

  7. ceph存储之查找对象

    对象存储(而非块存储): 要把对象存入ceph集群,客户端必须做到: 1.指定对象名 2.指定存储池 Ceph客户端检出最新集群运行图,客户端用CRUSH算法动态地计算出如何把对象映射到归置组.然后计 ...

  8. 用AS3清空容器下所有子显示对象

    容器中的子显示对象分为两类: 处于显示列表中的子显示对象.被numChildren所记录的. 由容器graphics对象绘制出来的矢量图.这个矢量图不属于Shape类型,不在容器的显示列表中,不被nu ...

  9. 配置SecureCRT连接Linux CentOS

    链接地址:http://f.dataguru.cn/thread-144513-1-1.html 环境:Linux:centos5.8虚拟机:VirtualBox本机:windows至于怎么安装Cen ...

  10. YII重点文件

    yii\di\Containeryii\base\Componentyii\base\Objectyii\base\Configurableyii\web\Applicationyii\base\Ap ...