fcntl获取和修改文件打开状态标志
[root@bogon code]# cat b.c
#include<stdio.h>
#include<error.h>
#include<unistd.h>
#include<fcntl.h>
int main()
{
int fd=open("a.c",O_RDONLY);//以可读方式打开
int flags;
flags=fcntl(fd,F_GETFL);//用flags记录文件打开状态标志,flags的值至于open里面的打开方式有关,与打开的文件本身属性无关,也就是说假设a.c的属性为777,但是在open时是只以可读方式打开的,那么flags只能检测出可读
if(flags==-1)
perror("fcntl");
if(flags&O_RDWR)//检测是否可读可写
printf("can read can write\n");
else
printf("just can read\n");
return 0;
}
[root@bogon code]# gcc b.c
[root@bogon code]# ./a.out
just can read
[root@bogon code]#
上面这个程序虽然没有错,不过更正确的写法应该是下面这个
[root@bogon code]# cat b.c
#include<stdio.h>
#include<error.h>
#include<unistd.h>
#include<fcntl.h>
int main()
{
int fd=open("a.c",O_RDWR);
int flags,accessMode;
flags=fcntl(fd,F_GETFL);
if(flags==-1)
perror("fcntl");
accessMode=flags&O_ACCMODE;
if(accessMode==O_RDWR)
printf("can read can write\n");
else
printf("just can read\n");
return 0;
}
[root@bogon code]# gcc b.c
[root@bogon code]# ./a.out
can read can write
[root@bogon code]#
接下来我们来见识一下fcntl是如何修改文件打开状态标志的
哪些情况下我们需要修改文件状态标志呢
一:文件不是由调用程序打开,所以程序也无法使用open函数来控制文件的状态标志,例如标准输入输出描述符
二:文件描述符的获取是通过open之外的系统调用,例如pipe以及socket等。
[root@bogon code]# cat b.c
#include<stdio.h>
#include<error.h>
#include<unistd.h>
#include<fcntl.h>
int main()
{
int fd=open("a.c",O_RDWR);
int flags,accessMode;
flags=fcntl(fd,F_SETFL);
if(flags==-1)
perror("fcntl");
flags|=O_APPEND;//添加O_APPEND标志
fcntl(fd,F_SETFL,flags);//设置O_APPEND标志
if(flags==O_APPEND)
printf("can append\n");
if(flags==O_RDWR)//我这里只是用来测试原来的状态标志会不会改变,从结果来看,貌似会的
printf("just can read and write\n");
else
printf("just can't read and write\n");
return 0;
}
[root@bogon code]# gcc b.c
[root@bogon code]# ./a.out
can append
just can't read and write
[root@bogon code]#
fcntl获取和修改文件打开状态标志的更多相关文章
- 第七篇:使用 fcntl 函数 获取,设置文件的状态标志
前言 当打开一个文件的时候,我们需要指定打开文件的模式( 只读,只写等 ).那么在程序中如何获取,修改这个文件的状态标志呢? 本文将告诉你如何用 fcntl函数 获取指定文件的状态标志. 解决思路 1 ...
- 使用 fcntl 函数 获取,设置文件的状态标志
前言 当打开一个文件的时候,我们需要指定打开文件的模式( 只读,只写等 ).那么在程序中如何获取,修改这个文件的状态标志呢?本文将告诉你如何用 fcntl函数 获取指定文件的状态标志. 解决思路 1. ...
- fcntl()函数之文件打开状态
比较有用的就两个. 1.获得/设置文件打开状态标志 oldflag=fcntl(fd,F_GETFL); 获得打开文件的状态标志. arg=oldflag|O_APPEND; fcntl(fd,F_S ...
- C#获取并修改文件扩展名的方法
本文实例讲述了C#获取并修改文件扩展名的方法.分享给大家供大家参考.具体分析如下: 这里使用C#编程的方法改变文件扩展名的文件,必须使用Path类. Path类用来解析文件系统路径的各个部分.静态方法 ...
- 在Delphi中获取和修改文件的时间
转载自 http://www.cnblogs.com/jieke/archive/2013/01/11/2855782.html 本文介绍了在Delphi中利用系统函数和Windows API函数调用 ...
- linux修改文件打开最大数(ulimit命令)
解除 Linux 系统的最大进程数和最大文件打开数限制:vi /etc/security/limits.conf# 添加如下的行* soft noproc 65536 * hard noproc 65 ...
- linux编程fcntl获取和设置文件状态
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> ...
- linux 修改文件打开数量限制
1.查看打开文件数量限制 ulimit -a ulimit -n 2.临时修改 ulimit -n 2048 3.永久修改 vi /etc/security/limits.conf 追加 * soft ...
- Centos修改文件打开数限制
一.查看系统限制最大打开数 cat /proc/sys/fs/file-max 还有一个问题是file-max最大能设置多大呢?一个经验算法是 256个fd 需4M内存.例如8G内存,8*1024/4 ...
随机推荐
- uitableView group模式下的间距问题
我么在使用group模式定义tableview的时候,系统默认是会有head和foot的间距的,来区分我们不同的group:在具体使用的时候又时候我们不需要这个间距.我们可以重新赋值这些间距来达到我们 ...
- Cracking The Coding Interview 9.6
//原文: // // Given a matrix in which each row and each column is sorted, write a method to find an el ...
- 5.1 C++基本操作符重载
参考:http://www.weixueyuan.net/view/6379.html 总结: 操作符重载指的是将C++提供的操作符进行重新定义,使之满足我们所需要的一些功能. 长度运算符“sizeo ...
- SharePoint REST API - 文件夹和文件
博客地址:http://blog.csdn.net/FoxDave 本篇讲述如何通过REST操作文件夹和文件. 使用REST操作文件夹 在你知道某个文档库中的文件夹的URL时,可以使用如下的代码获 ...
- <Spark><Programming><Key/Value Pairs><RDD>
Working with key/value Pairs Motivation Pair RDDs are a useful building block in many programs, as t ...
- Python 通过队列实现一个生产者消费者模型
import time from multiprocessing import Process,Queue #生产者 def producer(q): for i in range(10): time ...
- Python 内置函数2
print(list("胡辣汤")) lst = ["河南话", "四川话", "东北", "山东" ...
- python pygame实现简单的网游
此示例为简单的实现游戏服务器端和客户端的消息同步,使用自定定义协议,引入了twisted网络框架,还有诸多不足(其实就是半成品). 资源下载地址: http://download.csdn.net/d ...
- HDU 2585 Hotel(字符串的模糊匹配+递归)
Problem Description Last year summer Max traveled to California for his vacation. He had a great tim ...
- 如何使用DAX函数解决动态图表标题
您可能知道,Power BI中的图表(以及许多其他可视化)具有可以设置为任何静态文本的标题.您可以通过选择图表,转到“可视化对象”窗格中的“格式”选项卡,然后更改“标题”部分中的属性(如下所示)来完成 ...