Unix高级环境编程之fcntl函数
#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;
}
Unix高级环境编程之fcntl函数的更多相关文章
- unix下网络编程之I/O复用(三)
poll函数 在上文unix下网络编程之I/O复用(二)中已经介绍了select函数的相关使用,本文将介绍另一个常用的I/O复用函数poll.poll提供的功能与select类似,不过在处理流设备时, ...
- UNIX高级环境编程1
UNIX高级环境编程1 故宫角楼是很多摄影爱好者常去的地方,夕阳余辉下的故宫角楼平静而安详. 首先,了解一下进程的基本概念,进程在内存中布局和内容. 此外,还需要知道运行时是如何为动态数据结构(如链表 ...
- linux c编程之fcntl
fcntl可实现对指定文件描述符的各种操作,其函数原型如下: int fcntl(int fd, int cmd, ... /* arg */ ); 其中,操作类型由cmd决定.cmd可取如下值: F ...
- UNIX高级环境编程(14)文件IO - O_DIRECT和O_SYNC详解 < 海棠花溪 >
春天来了,除了工作学习,大家也要注意锻炼身体,多出去运动运动. 上周末在元大都遗址公园海棠花溪拍的海棠花. 进入正题. O_DIRECT和O_SYNC是系统调用open的flag参数.通过指定o ...
- Windows编程之connect函数研究
写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...
- UNIX高级环境编程(10)进程控制(Process Control)- 竞态条件,exec函数,解释器文件和system函数
本篇主要介绍一下几个内容: 竞态条件(race condition) exec系函数 解释器文件 1 竞态条件(Race Condition) 竞态条件:当多个进程共同操作一个数据,并且结果依赖 ...
- Unix高级环境编程
[07] Unix进程环境==================================1. 进程终止 atexit()函数注册终止处理程序. exit()或return语句: ...
- UNIX高级环境编程(2)FIle I/O - 原子操作、共享文件描述符和I/O控制函数
引言: 本篇通过对open函数的讨论,引入原子操作,多进程通信(共享文件描述符)和内核相关的数据结构. 还会讨论集中常见的文件IO控制函数,包括: dup和dup2 sync,fsync和fdatas ...
- UNIX高级环境编程(8)进程环境(Process Environment)- 进程的启动和退出、内存布局、环境变量列表
在学习进程控制相关知识之前,我们需要了解一个单进程的运行环境. 本章我们将了解一下的内容: 程序运行时,main函数是如何被调用的: 命令行参数是如何被传入到程序中的: 一个典型的内存布局是怎样的: ...
随机推荐
- python实现路由追踪,并生成追踪图片
#!/usr/bin/env python # -*- coding: utf-8 -*- import os,sys,time,subprocess import warnings,logging ...
- linux安装netcat 运行udp服务器
liunx下安装netcat 1.下载安装包 wget https://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1. ...
- hdu-2157 How many ways??(矩阵快速幂)
题目链接: How many ways?? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- vijos1842(火柴排队)
描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度.现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:∑i=1n(ai−bi)2∑i=1n(ai−bi) ...
- mysql函数之九:MySql取得日期(前一天、某一天)
取得当天: SELECT curdate(); mysql> SELECT curdate();+------------+| curdate() |+------------+| 2013- ...
- zabbix snmp、jmx配置使用
SNMP: snmp是很古老的监控,我萌几乎可以在所有设备上看到它的身影 [root@linux-node1 ~]# yum install net-snmp net-snmp-libs net-sn ...
- firewalld·使用方法示例
firewalld使用方法示例 # systemctl start firewalld # 启动, # systemctl enable firewalld # 开机启动 # systemctl st ...
- js的常用正则表达式
1.在input框中只能输入金额,其实就是只能输入最多有两位小数的数字 //第一种在input输入框限制 <input type="text" maxlength=" ...
- 基于微信的SDK的学习与使用——实现产品支付
声明本篇博客为作者原创,本篇是继支付宝支付之后本人又学习的第二种支付实现,本篇着重于原理与注意事项的学习. 参考 参考 微信支付的开发文档相比支付宝的比较简单,但是使用功能丝毫也不含糊,我觉得简单易 ...
- Empire Strikes Back
题意: 给定$K$个数字,求最小的正整数$n$,使得$\prod_{i=1}^{K}{a_i !} | n!$ 解法: 注意到$$\sum_{p为质数}{1/p} = O(loglogn)$$, 这样 ...