#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;
}

最新文章

  1. [转]教你一招 - 如何给nopcommerce增加一个类似admin的area
  2. ajax实现下拉菜单无刷新加载更多
  3. PHP用curl伪造IP和来源
  4. Eclipse中进行Gradle+Jetty部署的web项目的断点调试
  5. linux取某个字段排重
  6. ajax正确返回数据,却进入了error分支
  7. MongoDB的安全性
  8. Android 调用系统的拍相程序进行录像
  9. 《招聘一个靠谱的iOS》面试题参考答案(上)
  10. LeetCode: Longest Consecutive Sequence [128]
  11. 14.8.1 Enabling File Formats
  12. 开始了大概三四天的Rails学习之路
  13. 大神博客链接系列---C#SubSonic3.0搭建ORM
  14. 【原创】1、简单理解微信小程序
  15. WebRTC技术调研
  16. django csrf token添加
  17. redis 系列8 数据结构之整数集合
  18. WebView的知识
  19. CentOS7 Python2 和Python3 共存(Python3安装)【转】
  20. Python网络编程-Socket简单通信(及python实现远程文件发送)

热门文章

  1. Struts2基础知识
  2. 存储过程系列二:适用函数wm_concat(column)函数实现字段合并
  3. PIL数据和numpy数据的相互转换
  4. [转载] Android raw与assets区别
  5. Fire Game
  6. 必须知道的八大种排序算法【java实现】
  7. HDOJ-2037
  8. roguelike地牢生成算法
  9. 16-CoreData之多表关联(存储自定义数据模型)
  10. JQuery onload、ready 加载顺序