#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h> #define ERR_EXIT( m ) \
do \
{ \
perror( m ); \
exit( EXIT_FAILURE ); \
}while( 0 ) //设置某个文件状态
void set_flag( int fd, int flags );
//清除某个文件状态
void clear_flag( int fd, int flags ); int main( int argc, char* argv[] ) { char buf[64] = { 0 };
int nread; //设置非阻塞状态
set_flag( 0, O_NONBLOCK );
//清除非阻塞状态, 读取标准输入又变成阻塞
clear_flag( 0, O_NONBLOCK );
nread = read( 0, buf, 64 );
if( -1 == nread ) {
ERR_EXIT( "获取输入失败" );
}
printf( "buf=%s\n", buf ); return 0;
} void set_flag( int fd, int flags ) {
int oldflag;
oldflag = fcntl( fd, F_GETFL, 0 );
if( -1 == oldflag ) {
ERR_EXIT( "获取原来的状态失败" );
} oldflag = oldflag | flags;
int ret = fcntl( fd, F_SETFL, oldflag );
if( -1 == ret ) {
ERR_EXIT( "设置新的文件状态失败" );
}
} void clear_flag( int fd, int flags ) {
int oldflag;
oldflag = fcntl( fd, F_GETFL, 0 );
if( -1 == oldflag ) {
ERR_EXIT( "获取原来的状态失败" );
}
oldflag = oldflag & ~flags;
int ret = fcntl( fd, F_SETFL, oldflag );
if( -1 == ret ) {
ERR_EXIT( "设置新的文件状态失败" );
}
}

  

linux编程fcntl获取和设置文件状态的更多相关文章

  1. linux编程fcntl获取和设置文件锁

    #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types. ...

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

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

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

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

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

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

  5. linux下对普通用户设置文件访问控命令之setfacl

    命令名 setfacl  -设置文件访问控制列表 常用用法:setfacl [-bkRd] [{-m|-x} acl参数] 目标文件名 命令的常用参数 -m 设置后续的acl参数给文件使用(常用). ...

  6. LinuxShell脚本编程基础5--数值,字符串,文件状态测试,((..))和[[..]]的使用

    1.数值比较 ! /bin/bash echo "enter a score:" read num1 ] then echo "Very Good" elif ...

  7. Linux 编程学习笔记----ANSI C 文件I/O管理

    转载请注明出处:http://blog.csdn.net/suool/article/details/38129201 问题引入 文件的种类 依据数据存储的方式不同,能够将文件分为文本文件和二进制文件 ...

  8. TDirectory.GetCreationTime、TDirectory.SetCreationTime获取和设置文件夹创建时间

    使用函数: System.IOUtils.TDirectory.GetCreationTime//获取创建时间 System.IOUtils.TDirectory.SetCreationTime//设 ...

  9. TDirectory.GetAttributes、TDirectory.SetAttributes获取和设置文件夹属性

    使用函数: System.IOUtils.TDirectory.GetAttributes//获取属性 System.IOUtils.TDirectory.SetAttributes//设置属性 注: ...

随机推荐

  1. Android插件基础之类加载器学习

    记录学习java 加载器学习所获心得,逐步记录了解java加载器的过程.为了知悉android 插件化的实现原理,从而需要从头了解android加载apk,以及基础的java类加载的加载过程情况,为方 ...

  2. 二、VUE项目BaseCms系列文章:项目目录结构介绍

    一. 目录结构截图 二. 目录结构说明 - documents    存放项目相关的文档文件 - api   api 数据接口目录 - assets    资源文件目录 - components   ...

  3. java开发实习生面试经历

     这是我第一次写博客,以前都是查看别人的博客分享学习技术,转眼间我也成为其中一员.从一位初学者到现在的开发实习生,不断前进着,跟随时代的脚步在程序的海洋里漂泊,也意识到自己的各种不足,但我还年轻,头还 ...

  4. Kafka 的No kafka server to stop报错处理

    使用kafka-server-stop.sh命令关闭kafka服务,发现无法删除,报错如下图No kafka server to stop 下面修改kafka-server-stop.sh将 PIDS ...

  5. 使用Active Database Duplication创建跨平台Data Guard设置 (Windows/Linux) (Doc ID 881421.1)

    Using Active Database Duplication to Create Cross Platform Data Guard Setup (Windows/Linux) (Doc ID ...

  6. ML.NET Model Builder 更新

    ML.NET是面向.NET开发人员的跨平台机器学习框架,而Model Builder是Visual Studio中的UI工具,它使用自动机器学习(AutoML)轻松地允许您训练和使用自定义ML.NET ...

  7. 《Web Development with Go》Mangodb插入struct数据

    学习数据持久化. package main import ( "fmt" "log" "time" "gopkg.in/mgo.v ...

  8. 使用hutool进行二维码制作

    2.在IDEA中使用代码块生成二维码

  9. opencv---(腐蚀、膨胀、边缘检测、轮廓检索、凸包、多边形拟合)

    一.腐蚀(Erode) 取符合模板的点, 用区域最小值代替中心位置值(锚点) 作用: 平滑对象边缘.弱化对象之间的连接. opencv 中相关函数:(erode) // C++ /** shape: ...

  10. SpringBoot系列——Filter 过滤器

    前言 本文记录一下在SpringBoot项目中是如何使用Filter过滤器 代码.测试 Filter过滤器是servlet包下面的东西,因此我们不需要再额外引包 方法一 直接实现Filter接口,并使 ...