#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. python实现路由追踪,并生成追踪图片

    #!/usr/bin/env python # -*- coding: utf-8 -*- import os,sys,time,subprocess import warnings,logging ...

  2. linux安装netcat 运行udp服务器

    liunx下安装netcat 1.下载安装包 wget https://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1. ...

  3. hdu-2157 How many ways??(矩阵快速幂)

    题目链接: How many ways?? Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 32768/32768 K (Java/O ...

  4. vijos1842(火柴排队)

    描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度.现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:∑i=1n(ai−bi)2∑i=1n(ai−bi) ...

  5. mysql函数之九:MySql取得日期(前一天、某一天)

    取得当天: SELECT curdate(); mysql> SELECT curdate();+------------+| curdate()  |+------------+| 2013- ...

  6. zabbix snmp、jmx配置使用

    SNMP: snmp是很古老的监控,我萌几乎可以在所有设备上看到它的身影 [root@linux-node1 ~]# yum install net-snmp net-snmp-libs net-sn ...

  7. firewalld·使用方法示例

    firewalld使用方法示例 # systemctl start firewalld # 启动, # systemctl enable firewalld # 开机启动 # systemctl st ...

  8. js的常用正则表达式

    1.在input框中只能输入金额,其实就是只能输入最多有两位小数的数字 //第一种在input输入框限制 <input type="text" maxlength=" ...

  9. 基于微信的SDK的学习与使用——实现产品支付

    声明本篇博客为作者原创,本篇是继支付宝支付之后本人又学习的第二种支付实现,本篇着重于原理与注意事项的学习. 参考  参考 微信支付的开发文档相比支付宝的比较简单,但是使用功能丝毫也不含糊,我觉得简单易 ...

  10. Empire Strikes Back

    题意: 给定$K$个数字,求最小的正整数$n$,使得$\prod_{i=1}^{K}{a_i !} | n!$ 解法: 注意到$$\sum_{p为质数}{1/p} = O(loglogn)$$, 这样 ...