比较有用的就两个。

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()函数之文件打开状态的更多相关文章

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

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

  2. UNIX环境编程学习笔记(5)——文件I/O之fcntl函数访问已打开文件的性质

    lienhua342014-08-29 fcntl 函数可以改变已打开的文件的性质. #include <fcntl.h> int fcntl(int filedes, int cmd, ...

  3. 第九篇:使用 lstat 函数获取文件信息

    前言 在之前的文章中,描述过如何用 fcntl 函数改变文件的状态标记.但,文件还有很多信息,如文件类型,权限设置,设备编号,访问时间等等.如果要获取这些信息,则使用函数 lstat 可以轻松达到这个 ...

  4. 使用 lstat 函数获取文件信息

    前言 在之前的文章中,描述过如何用 fcntl 函数改变文件的状态标记.但,文件还有很多信息,如文件类型,权限设置,设备编号,访问时间等等.如果要获取这些信息,则使用函数 lstat 可以轻松达到这个 ...

  5. Linux系统编程(3)——文件与IO之fcntl函数

    linux文件I/O用:open.read.write.lseek以及close函数实现了文件的打开.读写等基本操作.fcntl函数可以根据文件描述词来操作文件. 用法: int fcntl(int ...

  6. Linux 系统 文件锁 fcntl函数详解

    #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd); int fcntl(int fd, int ...

  7. Python函数篇(3)-内置函数、文件处理

    1.内置函数 上一篇文章中,我重点写了reduce.map.filter3个内置函数,在本篇章节中,会补充其他的一些常规内置函数,并重点写max,min函数,其他没有说明的函数,会在后面写到类和面向对 ...

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

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

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

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

随机推荐

  1. Iterator迭代器,获取集合元素

    * Object next() :返回下一个元素      * boolean hasNext():判断时是否有元素可以获取 public static void main(String[] args ...

  2. 实战Arch Unit

    在以前的文章中介绍了通过 [<实战PMD>](https://zhuanlan.zhihu.com/p/105585075).[<实战Checkstyle>](https:// ...

  3. input框随输入的文字的多少自动调整宽度粗略版本

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. atan2&sin

    //弧度转化角度:弧度*180/PI //角度转化弧度:角度*PI/180 #include <math.h> #include <stdio.h> const double ...

  5. h5-伪元素-before和after

    做一个门票或者邮票:效果图 1.html就是两个div 2.具体css代码 <style> /*左侧长方体基本样式*/ div:nth-of-type(1){ width: 300px; ...

  6. Eclipse Springboot项目Dokcer

    配置好Dockerfile FROM openjdk:8-jdk-alpine ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar ENTRYPOIN ...

  7. 【PXC】关于限流的参数,状态值说明

    一.什么是流控(FC)?如何工作? 节点接收写集并把它们按照全局顺序组织起来,节点将接收到的未应用和提交的事务保存在接收队列中,当这个接收队列达到一定的大小,将触发限流:此时节点将暂停复制,节点会先处 ...

  8. mongodb的常见使用命令行

    由于cms工程要连接mongodb所以需要在在cms服务端工程添加如下依赖:项目使用spring data mongodb操作mongodb数据库 <dependency> <gro ...

  9. JavaWeb部分视频\2-12JSP,EL和JSTL

    JavaWeb知识结构图 第3节 EL介绍和运算符 && 第4节 EL获取域中存储的数据 ## EL表达式 1. 概念:Expression Language 表达式语言 2. 作用: ...

  10. GetTextExtentPoint32

    /////////////////////////////////////////////////////////////// // 04FirstWindow.cpp文件 #include < ...