fcntl 获取文件状态标志
int fcntl(int fd,int cmd,...)
函数fcntl提供了非常丰富的功能。主要依赖于cmd的各种参数:
- 复制已有的文件描述符 F_DUPFD,F_DUPFD_CLOEXEC
- 获取设置文件描述符的标志 F_GETFD,F_SETFD
- 获取设置文件状态标志 F_GETFL,F_SETFL
- 获取设置异步IO的所有权 F_GETOWN,F_SETFL
- 获取设置记录锁 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 获取文件状态标志的更多相关文章
- python_如何获取文件状态
案例: 在某项目中,需要获取文件状态,如: 文件的类型(普通文件.目录.符合连接.设备文件) 文件的访问权限 文件最后 访问.修改.节点状态 时间 普通文件大小 -- 如何解决? 方法1:通过os原始 ...
- C语言stat()函数:获取文件状态
相关函数:fstat, lstat, chmod, chown, readlink, utime 头文件:#include<sys/stat.h> #include<uninstd ...
- 第七篇:使用 fcntl 函数 获取,设置文件的状态标志
前言 当打开一个文件的时候,我们需要指定打开文件的模式( 只读,只写等 ).那么在程序中如何获取,修改这个文件的状态标志呢? 本文将告诉你如何用 fcntl函数 获取指定文件的状态标志. 解决思路 1 ...
- 使用 fcntl 函数 获取,设置文件的状态标志
前言 当打开一个文件的时候,我们需要指定打开文件的模式( 只读,只写等 ).那么在程序中如何获取,修改这个文件的状态标志呢?本文将告诉你如何用 fcntl函数 获取指定文件的状态标志. 解决思路 1. ...
- fcntl获取和修改文件打开状态标志
[root@bogon code]# cat b.c #include<stdio.h> #include<error.h> #include<unistd.h> ...
- LINUX获取文件信息
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- Python-获取文件状态模块-os stat lastat fstat path
案例: 在某项目中,需要获取文件状态,如: 文件的类型(普通文件.目录.符合连接.设备文件) 文件的访问权限 文件最后 访问.修改.节点状态 时间 普通文件大小 -- 如何解决? 方法1:通过os原始 ...
- linux编程fcntl获取和设置文件状态
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> ...
- 安装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' 的 ...
随机推荐
- [CLR via C#]11. 事件
一. 设计要公开事件的类型 如果类型定义了事件成员,那么类型(或类型实例)就可以通知其他对象发生了一些特定的事情. 例如,Button类提供了一个名为Click的事件.应用程序中的一个或多个对象可能想 ...
- ActiveReports 报表应用教程 (1)---Hello ActiveReports
在开始专题内容之前,我们还是了解一下 ActiveReports 是一款什么产品:ActiveReports是一款在全球范围内应用非常广泛的报表控件,以提供.NET报表所需的全部报表设计功能领先于同类 ...
- 字符串中Emoji表情处理
吃了经验的亏,因为Emoji表情引起的项目bug被撸主遇到两次了,总有一些调皮的小朋友爱用表情来搞点事.第一次把当时那个表改为utf8mb4解决了,第二次说啥都不好使.网上找了半天,发现好多人不去实验 ...
- POJ 3233 Matrix Power Series 矩阵快速幂+二分求和
矩阵快速幂,请参照模板 http://www.cnblogs.com/pach/p/5978475.html 直接sum=A+A2+A3...+Ak这样累加肯定会超时,但是 sum=A+A2+...+ ...
- 四、MyBatis主配置文件
//备注:该博客引自:http://limingnihao.iteye.com/blog/1060764 在定义sqlSessionFactory时需要指定MyBatis主配置文件: Xml代码 收藏 ...
- NLog在.NET Core Console Apps中的简单应用
什么是NLog? NLog is a free logging platform for .NET with rich log routing and management capabilities. ...
- jquery重置html form
很多时候在ajax提交或者对话框隐藏之后,我们希望重置默认值以便下次打开对话框时保持干净. 因为jquery选择器返回的是list,并且没有对此提供reset方法,所以需要针对单个元素进行reset. ...
- 转载 BCS 的好文章 1 - 怎么创建和使用BCS
http://www.sharepointfabian.com/2010/04/16/how-to-create-configure-consume-sharepoint-2010-secure-st ...
- 微信支付redirect_uri参数错误
在做微信支付的时候,点击提交,出现“redirect_uri参数错误”.经过查找,需要在后台正确设置授权域名.大致步骤如下:1.首先登录微信公众号管理后台2.点击开发者中心3.找到 网页账号—> ...
- 通过重写OnScrollListener来监听RecyclerView是否滑动到底部
为了增加复用性和灵活性,我们还是定义一个接口来做监听滚动到底部的回调,这样你就可以把它用在listview,scrollView中去. OnBottomListener package kale.co ...