int fcntl(int fd,int cmd,...)

  函数fcntl提供了非常丰富的功能。主要依赖于cmd的各种参数:

  1. 复制已有的文件描述符 F_DUPFD,F_DUPFD_CLOEXEC
  2. 获取设置文件描述符的标志 F_GETFD,F_SETFD
  3. 获取设置文件状态标志 F_GETFL,F_SETFL
  4. 获取设置异步IO的所有权 F_GETOWN,F_SETFL
  5. 获取设置记录锁 F_GETLK,F_SETLK,F_SETLKW

  

  当cmd= F_GETFL时,fcntl的功能就是获取fd的文件状态的标志。和其他地方不同的是,这个返回的数值并不是每种标志各占二进制的一位。因为O_RDONLY,O_WRONLY,

O_RDWR是互斥的状态。在处理返回值时,使用O_ACCMODE宏可以将fd文件的读写状态取出来。

  将O_RDONLY,O_WRONLY,O_RDWR,O_ACCMODE打印出来分别0,1,2,3,用3去位于0,1,2结果很明显。

DEMO:

  

 #include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h> int main(int argc,char** argv)
{
if(argc != )
return -;
int fl =;
if((fl = fcntl(atoi(argv[]),F_GETFL)) < ) {
printf("getfl failed.");
exit(-);
} switch (fl & O_ACCMODE) {
case O_RDONLY:
printf("O_RDONLY\n");
break;
case O_WRONLY:
printf("O_WRONLY\n");
break;
case O_RDWR:
printf("O_RDWR\n");
break;
} if(fl & O_APPEND)
printf("O_APPEND\n");
if(fl & O_NONBLOCK)
printf("O_NONBLOCK\n");
if(fl & O_SYNC)
printf("O_SYNC\n");
if(fl & O_FSYNC)
printf("O_FSYNC\n"); }

结果:

  

  $a.out  < .c

  O_RDONLY

  $a.out >.c

  $cat .c

  O_WRONLY

  $a.out  >>.c

  $cat .c

  O_WRONLY

  O_APPEND

  $a.out  <>.c

  O_RDWR

  上边使用重定向,0,1分别别重定向到文件。于是对fd GETFL就是对这个文件GETFL。

fcntl 获取文件状态标志的更多相关文章

  1. python_如何获取文件状态

    案例: 在某项目中,需要获取文件状态,如: 文件的类型(普通文件.目录.符合连接.设备文件) 文件的访问权限 文件最后 访问.修改.节点状态 时间 普通文件大小 -- 如何解决? 方法1:通过os原始 ...

  2. C语言stat()函数:获取文件状态

    相关函数:fstat, lstat, chmod, chown, readlink, utime 头文件:#include<sys/stat.h>  #include<uninstd ...

  3. 第七篇:使用 fcntl 函数 获取,设置文件的状态标志

    前言 当打开一个文件的时候,我们需要指定打开文件的模式( 只读,只写等 ).那么在程序中如何获取,修改这个文件的状态标志呢? 本文将告诉你如何用 fcntl函数 获取指定文件的状态标志. 解决思路 1 ...

  4. 使用 fcntl 函数 获取,设置文件的状态标志

    前言 当打开一个文件的时候,我们需要指定打开文件的模式( 只读,只写等 ).那么在程序中如何获取,修改这个文件的状态标志呢?本文将告诉你如何用 fcntl函数 获取指定文件的状态标志. 解决思路 1. ...

  5. fcntl获取和修改文件打开状态标志

    [root@bogon code]# cat b.c #include<stdio.h> #include<error.h> #include<unistd.h> ...

  6. LINUX获取文件信息

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  7. Python-获取文件状态模块-os stat lastat fstat path

    案例: 在某项目中,需要获取文件状态,如: 文件的类型(普通文件.目录.符合连接.设备文件) 文件的访问权限 文件最后 访问.修改.节点状态 时间 普通文件大小 -- 如何解决? 方法1:通过os原始 ...

  8. linux编程fcntl获取和设置文件状态

    #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> ...

  9. 安装sudo apt-get install ros-kinetic-desktop-full,报错mv: 无法获取'/var/lib/ni/licenses.xml.dpkg-old' 的文件状态(stat): 没有。。。。

    安装sudo apt-get install ros-kinetic-desktop-full,报了一堆错误 mv: 无法获取'/var/lib/ni/licenses.xml.dpkg-old' 的 ...

随机推荐

  1. c#通用递归生成无限层级树

    NewsType结构: Id ParentId Name children(List<NewsType>) public void LoopToAppendChildren(List< ...

  2. WPF,给颜色SolidColorBrush添加动画

    /// <summary> /// 设置颜色动画 /// </summary> /// <returns></returns> private Soli ...

  3. WebApi传参总动员(填坑)

    本以为系列文章已经Over,突然记起来前面留了个大坑还没填,真是自己给自己挖坑. 这个坑就是: (body 只能被读取一次)Only one thing can read the body MVC和W ...

  4. C#中ListView的简单使用方法

    ListView是用于显示数据的,先在窗体中拉一个lisview控件,还有一些新增.修改.删除.查询按钮和文本框,控件名称为listview,按钮为btnInsert,btnUpate,btnDele ...

  5. csharp: SDK:CAPICOM

    http://www.microsoft.com/zh-cn/download/details.aspx?id=25281 //************************************ ...

  6. ahjesus mongodb指定到数据盘连接不上的解决方案

    关于配置路径指定到数据盘会出现连接不上的情况 我发现是因为数据盘权限不足引起的,目前没找到治本的方法 有个治标的方法就是设置数据盘的权限和用户 sudo chmod 777 * -R  /path/d ...

  7. Picasso

    1.简介 Picasso是Square公司出品的一个强大的图片下载和缓存图片库1)在adapter中需要取消已经不在视野范围的ImageView图片资源的加载,否则会导致图片错位,Picasso已经解 ...

  8. javascript --- Ajax基础

    神马是Ajax? Ajax即‘Asynchronous javascript and XML’(异步javascript和XML),也就是所谓的无刷新页面读取技术. http请求 首先要了解http请 ...

  9. Spark GraphX学习资料

    <Spark GraphX 大规模图计算和图挖掘> http://book.51cto.com/art/201408/450049.htm http://www.csdn.net/arti ...

  10. C++ RTTI

    一.定义:RTTI:Run Time Type Identification ,运行时类型识别:指程序能够使用基类的指针或引用来检索其所指对象的实际派生类型.二.使用方式:C++中有两个操作符提供RT ...