Unix高级环境编程之fcntl函数
2024-08-29 19:06:28
#include <fcntl.h>
int fcntl(int fd, int cmd, ...)
fcntl功能
- 复制一个现有的描述符 (cmd = F_DUPFD)
返回值:新文件描述符, 新描述符__和fd共享__同一文件表项
dup(fd) <===> fcntl(fd, F_DUPFD, 0)
dup2(fd1, fd2)
<===>
close(fd2);
fcntl(fd1, F_DUPFD, fd2)
获得/设置文件描述符标记(cmd = F_GETFD 或者 F_SETFD)
F_GETFD 对应于fd的文件描述符标志作为函数返回值
F_SETFD 给fd设置文件描述符,新标志值按第三个参数设置获得/设置文件状态标志(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**取得访问模式位,然后将结果与这三个值中任意一个比较.获得/设置异步IO所有权(cmd = F_GETDOWN 或者 F_SETDOWN)
获得/设置记录锁(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;
}
最新文章
- [转]教你一招 - 如何给nopcommerce增加一个类似admin的area
- ajax实现下拉菜单无刷新加载更多
- PHP用curl伪造IP和来源
- Eclipse中进行Gradle+Jetty部署的web项目的断点调试
- linux取某个字段排重
- ajax正确返回数据,却进入了error分支
- MongoDB的安全性
- Android 调用系统的拍相程序进行录像
- 《招聘一个靠谱的iOS》面试题参考答案(上)
- LeetCode: Longest Consecutive Sequence [128]
- 14.8.1 Enabling File Formats
- 开始了大概三四天的Rails学习之路
- 大神博客链接系列---C#SubSonic3.0搭建ORM
- 【原创】1、简单理解微信小程序
- WebRTC技术调研
- django csrf token添加
- redis 系列8 数据结构之整数集合
- WebView的知识
- CentOS7 Python2 和Python3 共存(Python3安装)【转】
- Python网络编程-Socket简单通信(及python实现远程文件发送)