fcntl()函数之文件打开状态
比较有用的就两个。
1、获得/设置文件打开状态标志
oldflag=fcntl(fd,F_GETFL);
获得打开文件的状态标志。
arg=oldflag|O_APPEND;
fcntl(fd,F_SETFL,arg).//追加文件标志
代码如下:
/获取/设置文件打开状态标志
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
/*
#define O_CREAT 00000100 // not fcntl
#define O_EXCL 00000200 // not fcntl
#define O_NOCTTY 00000400 // not fcntl
#define O_TRUNC 00001000 // not fcntl
*/
void showFlags(int flag)
{
//O_ACCMODE 0x3 由于O_RDONLY O_WRONLY O_RDWR用低两个比特表示
switch(flag&O_ACCMODE){
case O_RDONLY:printf("O_RDONLY ");break;
case O_WRONLY:printf("O_WRONLY ");break;
case O_RDWR :printf("O_RDWR "); break;
};
////////////////////////
if(flag & O_NONBLOCK){
printf("O_NONBLOCK ");
}
if(flag & O_ASYNC){
printf("O_ASYNC ");
}
if(flag & O_APPEND){
printf("O_APPEND ");
}
putchar('\n');
}
int main(void)
{
int ret,flag,fd;
fd=open("./test.txt",O_WRONLY|O_TRUNC|O_CREAT|O_NONBLOCK|O_ASYNC,0644);
if(fd==-1)
{
perror("open");
return 1;
}
printf("open fd:%d\n",fd);
//get
flag=fcntl(fd,F_GETFL);
if(flag==-1) return 2;
showFlags(flag);
printf("增加O_APPEND\n");
/*
* On Linux this command can change onlythe O_APPEND,and O_NONBLOCK flags.
*/
//加入一个O_APPEND
//int arg=O_APPEND;//影响原来
int arg=flag|O_APPEND;//不影响原来
ret=fcntl(fd,F_SETFL,arg);
if(ret==-1) return 3;
//get
flag=fcntl(fd,F_GETFL);
if(flag==-1) return 2;
showFlags(flag);
printf("移除O_NONBLOCK\n");
//移除O_NONBLOCK
arg=flag & (~O_NONBLOCK);
ret=fcntl(fd,F_SETFL,arg);
if(ret==-1) return 3;
//get
flag=fcntl(fd,F_GETFL);
if(flag==-1) return 2;
showFlags(flag);
close(fd);
return 0;
}
fcntl()函数之文件打开状态的更多相关文章
- fcntl获取和修改文件打开状态标志
[root@bogon code]# cat b.c #include<stdio.h> #include<error.h> #include<unistd.h> ...
- UNIX环境编程学习笔记(5)——文件I/O之fcntl函数访问已打开文件的性质
lienhua342014-08-29 fcntl 函数可以改变已打开的文件的性质. #include <fcntl.h> int fcntl(int filedes, int cmd, ...
- 第九篇:使用 lstat 函数获取文件信息
前言 在之前的文章中,描述过如何用 fcntl 函数改变文件的状态标记.但,文件还有很多信息,如文件类型,权限设置,设备编号,访问时间等等.如果要获取这些信息,则使用函数 lstat 可以轻松达到这个 ...
- 使用 lstat 函数获取文件信息
前言 在之前的文章中,描述过如何用 fcntl 函数改变文件的状态标记.但,文件还有很多信息,如文件类型,权限设置,设备编号,访问时间等等.如果要获取这些信息,则使用函数 lstat 可以轻松达到这个 ...
- Linux系统编程(3)——文件与IO之fcntl函数
linux文件I/O用:open.read.write.lseek以及close函数实现了文件的打开.读写等基本操作.fcntl函数可以根据文件描述词来操作文件. 用法: int fcntl(int ...
- Linux 系统 文件锁 fcntl函数详解
#include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd); int fcntl(int fd, int ...
- Python函数篇(3)-内置函数、文件处理
1.内置函数 上一篇文章中,我重点写了reduce.map.filter3个内置函数,在本篇章节中,会补充其他的一些常规内置函数,并重点写max,min函数,其他没有说明的函数,会在后面写到类和面向对 ...
- 第七篇:使用 fcntl 函数 获取,设置文件的状态标志
前言 当打开一个文件的时候,我们需要指定打开文件的模式( 只读,只写等 ).那么在程序中如何获取,修改这个文件的状态标志呢? 本文将告诉你如何用 fcntl函数 获取指定文件的状态标志. 解决思路 1 ...
- 使用 fcntl 函数 获取,设置文件的状态标志
前言 当打开一个文件的时候,我们需要指定打开文件的模式( 只读,只写等 ).那么在程序中如何获取,修改这个文件的状态标志呢?本文将告诉你如何用 fcntl函数 获取指定文件的状态标志. 解决思路 1. ...
随机推荐
- oracle(8)视图和查询数据库对象方法
视图 view 视图是数据库的对象之一. 视图也叫做虚表,既虚拟表,本质是对应一条select 语句, select语句的结果集赋予一个名字就是视图的名字. 作用: 1.可以简化复杂的查询 2.可以限 ...
- lvs和keepalived
LVS调度算法参考 RR:轮询 WRR :加权轮询 DH :目标地址哈希 SH:源地址hash LC:最少连接 WLC:加权最少连接,默认 SED:最少期望延迟 NQ:从不排队调度方法 LBLC:基于 ...
- html+css新特性
audio 音频 viedeo 视频 <audio src = ""02.pogg" controls = "controls"> lo ...
- Django1.11序列化与反序列化
django序列化与反序列化 from rest_framwork import serializers serializers.ModelSerializer 模型类序列化器,必须依据模型类创建序列 ...
- 模拟jenkins通过shell给ansible传入变量
jenkins.sh #!/bin/bash name1='robin h h li' age1='11' declare -A dic dic=( [name1]="${name1}&qu ...
- 2019~2020icpc亚洲区域赛徐州站H. Yuuki and a problem
2019~2020icpc亚洲区域赛徐州站H. Yuuki and a problem 题意: 给定一个长度为\(n\)的序列,有两种操作: 1:单点修改. 2:查询区间\([L,R]\)范围内所有子 ...
- webview Java与JS互调
Android调用JS:方法一 webView.loadUrl("javascript:show('"+info+"')"); Android调用JS:方法二 ...
- PAT Advanced 1127 ZigZagging on a Tree (30) [中序后序建树,层序遍历]
题目 Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree c ...
- oracle的用户、权限、表空间的管理
1.创建表空间 create tablespace test1_tablespace datafile 'test1file.dbf' size 10m; 2.创建临时表空间 create tempo ...
- 零相关|回归|相关|相关系数|回归解释相关|r判断相关性|相关系数的区间估计|数据类型|非线性回归
零相关是什么? 零相关亦称“不相关”.相关的一种.两个变量的相关系数r=0时的相关.零相关表示两个变量非线性相关,这时两个变量可能相互独立,也可能曲线相关.对于正态变量,两个变量零相关与两个变量相互独 ...