第七篇:使用 fcntl 函数 获取,设置文件的状态标志
前言
当打开一个文件的时候,我们需要指定打开文件的模式( 只读,只写等 )。那么在程序中如何获取,修改这个文件的状态标志呢?
本文将告诉你如何用 fcntl函数 获取指定文件的状态标志。
解决思路
1. 对于获取文件状态标志,我们可以通过调用fcntl函数得到一个记录文件标志的整型变量,然后分别让它和各个状态标志常量进行&操作。若操作结果为正则文件具有此状态标志,否则文件没有此状态标志。( 如果是检查只读,只写,可读可写,则需要和ACCMODE相&,然后判断其结果是否为O_RDONLY,O_WRONLY,O_RDWR)。
2. 对于增加文件状态标志,我们可以先调用fcntl函数得到一个记录文件标志的整型变量,然后让它 |= 你想为其增设的状态标志,最后再调用fcntl函数保存这个标志。
3. 对于删除文件状态标志,我们可以先调用fcntl函数得到一个记录文件标志的整型变量,然后让它 &= 你想为其增设的状态标志的~,最后再调用fcntl函数保存这个标志。
PS:调用fcntl函数需要包含 fcntl.h 头文件
示例代码 - 获取文件的状态标志
#include "apue.h"
#include <fcntl.h> int
main(int argc, char *argv[])
{
int val; // 以文件标志符作参数
if (argc != )
err_quit("usage: a.out <descriptor#>"); // 将字符串类型的文件标志符转换成整型
if ((val = fcntl(atoi(argv[]), F_GETFL, )) < )
err_sys("fcntl error for fd %d", atoi(argv[])); /*
* 下段代码检测标识符对应文件的读写属性
*/
switch (val & O_ACCMODE) {
case O_RDONLY:
printf("read only");
break; case O_WRONLY:
printf("write only");
break; case O_RDWR:
printf("read write");
break; default:
err_dump("unknown access mode");
} /*
* 下段代码检测标识符对应文件的其他属性
*/
if (val & O_APPEND)
printf(", append");
if (val & O_NONBLOCK)
printf(", nonblocking"); // 对于定义了O_SYNC标志的系统检测该标志
#if defined(O_SYNC)
if (val & O_SYNC)
printf(", synchronous writes");
#endif
#if !defined(_POSIX_C_SOURCE) && defined(O_FSYNC)
if (val & O_FSYNC)
printf(", synchronous writes");
#endif
putchar('\n');
exit();
}
示例代码 - 增加文件的状态标志
#include "apue.h"
#include <fcntl.h> void
set_fl(int fd, int flags)
{
int val; // 获取记录状态标志的整型变量
if ((val = fcntl(fd, F_GETFL, )) < )
err_sys("fcntl F_GETFL error"); // 增加状态标志
val |= flags; // 保存状态标志
if (fcntl(fd, F_SETFL, val) < )
err_sys("fcntl F_SETFL error");
}
示例代码 - 删除文件的状态标志
#include "apue.h"
#include <fcntl.h> void
set_fl(int fd, int flags)
{
int val; // 获取记录状态标志的整型变量
if ((val = fcntl(fd, F_GETFL, )) < )
err_sys("fcntl F_GETFL error"); // 删除状态标志
val &= ~flags; // 保存状态标志
if (fcntl(fd, F_SETFL, val) < )
err_sys("fcntl F_SETFL error");
}
说明
fcntl函数的功能远不及此,其他的功能会随着学习的深入再做讲解。
第七篇:使用 fcntl 函数 获取,设置文件的状态标志的更多相关文章
- 使用 fcntl 函数 获取,设置文件的状态标志
前言 当打开一个文件的时候,我们需要指定打开文件的模式( 只读,只写等 ).那么在程序中如何获取,修改这个文件的状态标志呢?本文将告诉你如何用 fcntl函数 获取指定文件的状态标志. 解决思路 1. ...
- fcntl获取和修改文件打开状态标志
[root@bogon code]# cat b.c #include<stdio.h> #include<error.h> #include<unistd.h> ...
- fcntl函数用法——设置文件锁
fcntl函数.锁定文件,设置文件锁.设置获取文件锁:F_GETLK .F_SETLK .F_SETLKW文件锁结构,设置好用于fcntl函数的第三个参数.struct flock{ shor ...
- fcntl函数用法——操纵文件描述符状态
fcntl函数:操纵文件描述符,改变已经打开的文件的属性int fcntl(int fd, int cmd, ... //arg );cmd选项:一.复制文件描述符:F_DUPFD二.更改设置文件描 ...
- [VB.NET]调用API获取/设置键盘按键状态
1.调用GetAsyncKeyState()获取指定按键的状态,GetActiveKey()检索指定范围内的按键状态 2.调用keybd_event()可合成一次击键事件,通常两次击键事件间需要设定时 ...
- GetFontResourceInfo 函数: 获取字体文件对应的字体名
在 win 7, gdi32.dll,找不到 GetFontResourceInfo(), 但能找到 GetFontResourceInfoW(), 用法类似. //----------------- ...
- 第七篇:两个经典的文件IO程序示例
前言 本文分析两个经典的C++文件IO程序,提炼出其中文件IO的基本套路,留待日后查阅. 程序功能 程序一打印用户指定的所有文本文件,程序二向用户指定的所有文本文件中写入数据. 程序一代码及其注释 # ...
- fcntl函数用法——复制文件描述符
文件描述符复制和输出重定向dup() 用最小的文件描述符来复制,从0开始搜素.复制文件描述符后,最小文件描述符指向被复制描述符指向的文件.dup2(int oldfd,int newfd) 强制用ne ...
- fcntl()函数之文件打开状态
比较有用的就两个. 1.获得/设置文件打开状态标志 oldflag=fcntl(fd,F_GETFL); 获得打开文件的状态标志. arg=oldflag|O_APPEND; fcntl(fd,F_S ...
随机推荐
- <译>Spark Sreaming 编程指南
Spark Streaming 编程指南 Overview A Quick Example Basic Concepts Linking Initializing StreamingContext D ...
- 【VBA编程】14.操作工作簿对象
[访问工作簿] 对已经打开的工作簿,可以通过使用索引号来访问工作簿,也可以通过名称来访问工作簿 [代码区域] Sub 访问工作簿() Dim counter As Integer counter = ...
- 一个编译可执行jar包 jar包中不包含resources下config.properties且可以读到config.properties文件且classpath中有当前路径的pom
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- servlet 简单filter避免中文乱码等
Filter是个servlet中的接口,servlet内部实现了利用Filter来过滤请求. 可以在filter中根据条件决定是否调用chain.doFilter(request,response ...
- nutch中bin/crawl和bin/nutch crawl的用法(转)
针对上一篇文章中出现的问题:Command crawl is deprecated, please use bin/crawl instead错误信息,今天在官网上查阅了一下,进行了总结. 官网lin ...
- NET框架 Castle
Castle是针对.NET平台下的一个非常优秀的开源项目,从数据访问框架 ORM到依赖注入容器,再到WEB层的MVC框架.AOP,基本包括了整个开发过程中的所有东西,为我们快速的构建企业级的应用程序提 ...
- 【转载】C#根据当前时间获取周,月,季度,年度等时间段的起止时间
DateTime dt = DateTime.Now; //当前时间 DateTime startWeek = dt.AddDays(1 - Convert.ToInt32(dt.DayOfWeek. ...
- FIle类常用工具方法整理(持续更新)
1.递归遍历一个目录,获取所有文件名(也可以取到绝对路径) public static void traverse(String filePath, List<String> files) ...
- 自制MVC框架原理介绍
当初用jsp开发程序时,因为很多东西写在一起混淆的,项目做大或者变更的时候就会很吃力,联动性太大,有时修改视图的东西都可能会影响业务逻辑,分层不明确. 后来听说了Struts MVC,做过几个示例,层 ...
- android:imeOptions属性
imeOptions软键盘setOnEditorActionListener 默认情况下软键盘右下角的按钮为“下一个”,点击会到下一个输入框,保持软键盘 设置 android:imeOptions= ...