#include <fcntl.h>
int fcntl(int fd, int cmd, ...)

fcntl功能

  1. 复制一个现有的描述符 (cmd = F_DUPFD)
返回值:新文件描述符, 新描述符__和fd共享__同一文件表项
dup(fd) <===> fcntl(fd, F_DUPFD, 0)
dup2(fd1, fd2)
<===>
close(fd2);
fcntl(fd1, F_DUPFD, fd2)
  1. 获得/设置文件描述符标记(cmd = F_GETFD 或者 F_SETFD)

    F_GETFD 对应于fd的文件描述符标志作为函数返回值

    F_SETFD 给fd设置文件描述符,新标志值按第三个参数设置

  2. 获得/设置文件状态标志(cmd = F_GETFL 或者 F_SETFL)

    Note: F_GETFL:文件状态标志作为返回值

    O_RDONLY ------> 只读

    O_WRONLY ------> 只写

    O_RDWR ------> 为读写打开

    O_APPEND ------> 每次写时追加

    O_NONBLOK------> 非阻塞模式

    O_SYNC ------> 等待写完成(数据和属性)

    O_DSYNC ------> 等待写完成(仅数据)

    O_RSYNC ------> 读写同步

    NOTE: ** O_RDONLY,O_WRONLY,O_RDWR三种标志并不各占一位,由于历史原因这三种值互斥,一个文件只能有这三个值之一.因此必须用屏蔽字O_ACCOMDE**取得访问模式位,然后将结果与这三个值中任意一个比较.

  3. 获得/设置异步IO所有权(cmd = F_GETDOWN 或者 F_SETDOWN)

  4. 获得/设置记录锁(cmd = F_GETLK, F_SETLK 或者 F_SETLKW)

#include <iostream>
#include <fcntl.h>
#include <stdlib.h>
using namespace std; int main(int argc, char** argv)
{
if (argc != 2) {
cout << "Usage error" << endl;
return -1;
} cout << "argv[0]:" << argv[0] << " argv[1]:" << argv[1] << endl; int val = 0; //O_RDONLY 00
//O_WRONLY 01
//O_RDWR 02
//三种标志并不各站
if ((val = fcntl(atoi(argv[1]), F_GETFL, 0)) < 0) {
cout << "fcntl getfl error" << endl;
return -1;
} switch (val & O_ACCMODE) { //取得访问标志位.
case O_RDONLY:
cout << "read only" << endl;
break;
case O_WRONLY:
cout << "write only" << endl;
break;
case O_RDWR:
cout << "read write" << endl;
break;
default:
cout << "unkown access mode" << endl;
} if (val & O_APPEND) {
cout << ", append" << endl;
} if (val & O_NONBLOCK) {
cout << ", nonblock" << endl;
}
return 0;
}

Unix高级环境编程之fcntl函数的更多相关文章

  1. unix下网络编程之I/O复用(三)

    poll函数 在上文unix下网络编程之I/O复用(二)中已经介绍了select函数的相关使用,本文将介绍另一个常用的I/O复用函数poll.poll提供的功能与select类似,不过在处理流设备时, ...

  2. UNIX高级环境编程1

    UNIX高级环境编程1 故宫角楼是很多摄影爱好者常去的地方,夕阳余辉下的故宫角楼平静而安详. 首先,了解一下进程的基本概念,进程在内存中布局和内容. 此外,还需要知道运行时是如何为动态数据结构(如链表 ...

  3. linux c编程之fcntl

    fcntl可实现对指定文件描述符的各种操作,其函数原型如下: int fcntl(int fd, int cmd, ... /* arg */ ); 其中,操作类型由cmd决定.cmd可取如下值: F ...

  4. UNIX高级环境编程(14)文件IO - O_DIRECT和O_SYNC详解 < 海棠花溪 >

    春天来了,除了工作学习,大家也要注意锻炼身体,多出去运动运动.  上周末在元大都遗址公园海棠花溪拍的海棠花.   进入正题. O_DIRECT和O_SYNC是系统调用open的flag参数.通过指定o ...

  5. Windows编程之connect函数研究

    写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...

  6. UNIX高级环境编程(10)进程控制(Process Control)- 竞态条件,exec函数,解释器文件和system函数

    本篇主要介绍一下几个内容: 竞态条件(race condition) exec系函数 解释器文件    1 竞态条件(Race Condition) 竞态条件:当多个进程共同操作一个数据,并且结果依赖 ...

  7. Unix高级环境编程

    [07] Unix进程环境==================================1. 进程终止    atexit()函数注册终止处理程序.    exit()或return语句:    ...

  8. UNIX高级环境编程(2)FIle I/O - 原子操作、共享文件描述符和I/O控制函数

    引言: 本篇通过对open函数的讨论,引入原子操作,多进程通信(共享文件描述符)和内核相关的数据结构. 还会讨论集中常见的文件IO控制函数,包括: dup和dup2 sync,fsync和fdatas ...

  9. UNIX高级环境编程(8)进程环境(Process Environment)- 进程的启动和退出、内存布局、环境变量列表

    在学习进程控制相关知识之前,我们需要了解一个单进程的运行环境. 本章我们将了解一下的内容: 程序运行时,main函数是如何被调用的: 命令行参数是如何被传入到程序中的: 一个典型的内存布局是怎样的: ...

随机推荐

  1. jmeter中的响应断言

    断言就类似LoadRunner中的检查点.对上一个请求返回的信息,做字符串.数据包大小.HTML.XML.图片等做判断,确保返回的信息的准确性. jmeter的断言有好多,下面是一个响应断言 新建一个 ...

  2. TestNG测试用例编写和执行

    编写TestNG用例测试基本上包括以下步骤: 编写业务逻辑 针对业务逻辑中涉及的方法编写测试类,在代码中插入TestNG的注解 直接执行测试类或者添加一个testng.xml文件 运行 TestNG. ...

  3. linux应用之apache服务的安装及配置(centos)

    CentOS Apache服务器安装与配置   一.安装Apache程序,一般有三种安装方式:1.直接网络安装:2.下载rpm包,上传至服务器进行安装:3.通过原代码编译安装: yum -y inst ...

  4. 上传图片 ajax input type="file" 兼容 ie chroem 火狐

    上传图片,转载请注明出处!!! 兼容 ie chroem 火狐 html: <div id="uploadForm"> <input id="file& ...

  5. 使用grunt中遇到的问题

    1.使用jshint进行代码检查时,grunt命令后报错: 因为出现了乱码,我猜测是因为编码原因导致的.遂在webstorm的setting中修改了编码为utf-8,问题解决.

  6. kamailio/opensips snmp/cacti/zabbix监控

        kamailio/opensips是现在比较流行的sip proxy,有配置灵活.性能强大.支持各种RFC等优点,是杀人越货.谈情说爱是必备佳品.要保证这么好的东西稳定运行,监控是必不可少的, ...

  7. 给DataTable中添加一行数据

    一.如果该DataTable有两列,列的名称是Name,Age,且该DataTable的名称是dt; DataRow dr = dt.NewRow(); dr["Name"] = ...

  8. java 02 内部类

  9. C++ 预处理指令 #pragma

    http://www.cnblogs.com/qinfengxiaoyue/archive/2012/06/05/2535524.html

  10. java集合框架之ArrayList与LinkedList的区别

    参考http://how2j.cn/k/collection/collection-arraylist-vs-linkedlist/690.html#nowhere ArrayList和LinkedL ...