fcntl()
fcntl()
F_GETFL
---------------------------------------------
将文件状态标志作为函数值返回。
文件状态标志:
O_RDONLY O_WRONLY O_RDWR
O_APPEND O_NONBLOCK O_SYNC FASYNC(O_ASYNC)
三个存取方式标志(O_RDONLY, O_WRONLY, O_RDWR)是互斥的,一个文件只能有这三种值的其中一个。首选需要用屏蔽字O_ACCMODE取得存取方式位,然后将结果与这三个标志相比较。
F_SETFL
---------------------------------------------
将文件状态标志设置为第三个参数的值,可以更改的几个标志是:O_APPEND, O_NONBLOCK, O_SYNC, FASYNC(O_ASYNC)
注:
当一个打开的文件FASYNC标志变化时(调用fcntl()函数,设置FASYNC文件标志时),该文件所对应的设备驱动的fasync()接口将被调用。
---------------------------------------------
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
int fd, val, accmode;
if (argc != 2) {
printf("usage: ./a.out filename\n");
return -1;
}
if ((fd = open(argv[1], O_RDWR)) < 0) {
perror("open error");
return -1;
}
if ((val = fcntl(fd, F_GETFL)) < 0) {
perror("fcntl error");
return -1;
}
accmode = val & O_ACCMODE;
if (accmode == O_RDONLY) printf("read only\n");
else if (accmode == O_WRONLY) printf("write only\n");
else if (accmode == O_RDWR) printf("read write\n");
else printf("unknown access mode\n");
if ((val = fcntl(fd, F_SETFL, val | FASYNC | O_NONBLOCK)) < 0) {
perror("fcntl error");
return -1;
}
if ((val = fcntl(fd, F_GETFL)) < 0) {
perror("fcntl error");
return -1;
}
//if (val & O_ASYNC)
if (val & FASYNC)
printf("async\n");
if (val & O_NONBLOCK)
printf("nonblocking\n");
}
fcntl()的更多相关文章
- [APUE]不用fcntl实现dup2函数功能
dup2的函数定义为: #include <unistd.h> int dup2(int src_fd, int new_fd); 自己实现dup2函数有几个关键点: 1,检查给定的源fd ...
- APUE中fcntl.h的使用及O_SYNC在Mac与Ubuntu下的测试
此部分测试涉及到APUE V3中,第三章的图3-12到图3-14. 通过fcntl.h提供的功能,修改fd的文件属性,本处增加O_SYNC功能,并测试其效果. 本文涉及代码: tree ch3 ch3 ...
- APUE 习题3-2 实现dup2,要求不使用fcntl函数。
int mydup2(int oldfd, int newfd) { int tfd = 0; if (newfd < 0) { err_sys(&quo ...
- fcntl函数
很多时候,当我们有多个进程要访问同一个文件的时候,为了防止多进程访问导致的不一致,我们就要考虑进程间的同步问题. fcntl是一个很强大的函数,我们可以通过它给文件的某一部分上锁 int fcntl( ...
- Linux C fcntl()函数详解
fcntl系统调用 功能描述:根据文件描述词来操作文件的特性. 用法: int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg ...
- Linux文件(区域)锁函数 -- open()、fcntl()
一.什么是文件锁定 对于锁这个字,大家一定不会陌生,因为我们生活中就存在着大量的锁,它们各个方面发挥着它的作用,现在世界中的锁的功能都可归结为一句话,就是阻止某些人做某些事,例如,门锁就是阻止除了屋主 ...
- sys/types.h fcntl.h unistd.h sys/stat.h
sys/types.h 是Unix/Linux系统的基本系统数据类型的头文件,含有size_t,time_t,pid_t等类型. 在应用程序源文件中包含 <sys/types.h> 以访问 ...
- fcntl 获取文件状态标志
int fcntl(int fd,int cmd,...) 函数fcntl提供了非常丰富的功能.主要依赖于cmd的各种参数: 复制已有的文件描述符 F_DUPFD,F_DUPFD_CLOEXEC 获取 ...
- linxu c语言 fcntl函数和flock函数区别 【转】
flock和fcntl都有锁的功能,但他们还有一点小小的区别: 1.flock只能加全局锁,fcntl可以加全局锁也可以加局部锁. 2.当一个进程用flock给一个文件加锁时,用另一个进程再给这个文件 ...
- linxu fcntl 函数用法 【转】
功能描述:根据文件描述词来操作文件的特性. 文件控制函数 fcntl -- file control 头文件: #include <fcntl.h>; i ...
随机推荐
- HTML5 DTD
HTML5/HTML 4.01/XHTML 元素和有效的 DTD 下面的表格列出了所有的 HTML5/HTML 4.01/XHTML 元素,以及它们会出现在什么文档类型 (DTD) 中: 标签 HTM ...
- PHP学习笔记10-图片加水印
先找好一张图片,更名为face.jpeg,创建watermark.php: <?php /** * Created by PhpStorm. * User: Administrator * Da ...
- 深入浅出—JAVA(3)
3.认识变量 变量有两种:primitive主数据类型和引用. 变量有两种口味:清凉的primitive主数据类型与香辣的对象引用.primitive主数据类型用来保存基本类型的值,包括整数.布尔和浮 ...
- 腾讯地图之Marker
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- ASP.NET jQuery 随笔 显示CheckBoxList成员选中的内容
通过jQuery来获取CheckBoxList成员内容. <%@ Page Language="C#" AutoEventWireup="true" Co ...
- SpringBoot接口服务处理Whitelabel Error Page(转)
To switch it off you can set server.error.whitelabel.enabled=false http://stackoverflow.com/question ...
- Test class should have exactly one public zero-argument constructor
java.lang.Exception: Test class should have exactly one public zero-argument constructor at org.juni ...
- (step8.2.4)hdu 1846(Brave Game——巴什博奕)
题目大意:输入一个整数t,表示测试用例是.接着输入2个整数n,m.分别表示这堆石头中石头的个数,和每次所能取得最大的石头数.判断那一方为赢家 解题思路: 1)这是一道简单的巴什博弈: 所谓巴什博弈,是 ...
- 数据结构——二叉搜索树(Binary Search Tree)
二叉树(Binary Tree)的基础下 每个父节点下 左节点小,右节点大. 节点的插入: 若root==NULL则root=newnode 否则不断与节点值比较,较小则向左比较,较大则向右比较. 完 ...
- iOS多线程中的单例
#import "MyHandle.h" static MyHandle *handle = nil; @implementation MyHandle // 传统写法 // 此时 ...