linux fcntl 设置阻塞,Linux fcntl函数设置阻塞与非阻塞

转自http://www.cnblogs.com/xuyh/p/3273082.html

用命令F_GETFL和F_SETFL设置文件标志,比如阻塞与非阻塞

F_SETFL     设置给arg描述符状态标志,可以更改的几个标志是:O_APPEND, O_NONBLOCK,O_SYNC和O_ASYNC。

命令字(cmd)F_GETFL和F_SETFL的标志如下面的描述:

O_NONBLOCK       非阻塞I/O;如果read(2)调用没有可读取的数据,或者如果write(2)操作将阻塞,read或write调用返回-1和EAGAIN错误

O_APPEND             强制每次写(write)操作都添加在文件大的末尾,相当于open(2)的O_APPEND标志

O_DIRECT              最小化或去掉reading和writing的缓存影响.系统将企图避免缓存你的读或写的数据.

如果不能够避免缓存,那么它将最小化已经被缓存了的数 据造成的影响.如果这个标志用的不够好,将大大的降低性能

O_ASYNC              当I/O可用的时候,允许SIGIO信号发送到进程组,例如:当有数据可以读的时候

注意:      在修改文件描述符标志或文件状态标志时必须谨慎,先要取得现在的标志值,然后按照希望修改它,最后设置新标志值。不能只是执行F_SETFD或F_SETFL命令,这样会关闭以前设置的标志位。

#include #include#include#include#include#include

/**********************使能非阻塞I/O********************

*int flags;

*if(flags = fcntl(fd, F_GETFL, 0) < 0)

*{

* perror("fcntl");

* return -1;

*}

*flags |= O_NONBLOCK;

*if(fcntl(fd, F_SETFL, flags) < 0)

*{

* perror("fcntl");

* return -1;

*}

*******************************************************/

/**********************关闭非阻塞I/O******************

flags &= ~O_NONBLOCK;

if(fcntl(fd, F_SETFL, flags) < 0)

{

perror("fcntl");

return -1;

}

*******************************************************/

intmain()

{char buf[10] = {0};intret;intflags;//使用非阻塞io

if(flags = fcntl(STDIN_FILENO, F_GETFL, 0) < 0)

{

perror("fcntl");return -1;

}

flags|=O_NONBLOCK;if(fcntl(STDIN_FILENO, F_SETFL, flags) < 0)

{

perror("fcntl");return -1;

}while(1)

{

sleep(2);

ret= read(STDIN_FILENO, buf, 9);if(ret == 0)

{

perror("read--no");

}else{

printf("read = %d\n", ret);

}

write(STDOUT_FILENO, buf,10);

memset(buf,0, 10);

}return 0;

}

原文:http://www.cnblogs.com/zhangxuan/p/6306326.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550948.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux container框架,理解和配置LinuxContainerExecutor

最近在研究如何为Hadoop开启基于Kerberos的安全配置&#xff0c;经过千辛万苦配置好后本以为到了见证奇迹的时刻&#xff0c;但是卡在NodeManger无法启动&#xff0c;折磨的死去活来。经历了各种百度、google后依然无果&#xff0c;最终还是乖乖的回来细读Hadoop官方配置文档&a…

linux更新命令centos,CentOS 7.0命令更新新版特性

查看系统版本信息#uname -a#cat /etc/redhat-release升级所有包&#xff0c;改变软件设置和系统设置,系统版本内核都升级#yum -y update升级所有包&#xff0c;不改变软件设置和系统设置&#xff0c;系统版本升级&#xff0c;内核不改变#yum -y upgradeCentOS7中主机名的配置文…

linux bash and,linux bash shell中for的用法and示例

关于linux bash shell中的for语句在linux中shell是必不可少的一部分&#xff0c;但是在bash shell中有while&#xff0c;for&#xff0c;until等循环命令&#xff0c;今天就介绍一下关于for的一些用法。文中任何错误希望大佬们一一指出&#xff0c;不胜感激。bash shell中提供了…

mac利用vscode运行c语言程序,Mac下使用VScode编译配置C/C++程序详细图文教程

在mac上有时候需要编写一些c 或者 c的代码&#xff0c;如果使用 xcode&#xff0c;有时候就显得很笨重&#xff0c;而且运行起来很不方便。而微软提供了一个跨平台的编辑器visual studio code ,这个编辑器很轻量级&#xff0c;而且插件超多&#xff0c;你几乎可以在这个编辑器里…

c语言简答程序源代码,C语言简答题答案

C语言变量的存储特性可分四类&#xff1a;自动型(auto)、静态型(static)、外部型(extern)和寄存器型(register)。Auto的特点&#xff1a;1. [auto] 类型标识符 变量列表&#xff1b;常常可以缺省auto。2. 函数内定义的局部变量、函数的形式参数和函数体内分程序的局部变量。3. …

c语言中 exit的标准是什么,C语言中exit();肿么用?

表示 关闭所有文件&#xff0c;终止正在执行的进程。exit(1)表示异常退出.这个1是返回给操作系统的。exit(x)(x不为0)都表示异常退出exit(0)表示正常退出exit()的参数会被传递给一些操作系统&#xff0c;包括UNIX,Linux,和MS DOS&#xff0c;以供其他程序使用。程序例子&#x…

五邑大学c语言期末考试题,五邑大学 c语言试卷.doc

五邑大学 c语言试卷.doc下载提示(请认真阅读)1.请仔细阅读文档&#xff0c;确保文档完整性&#xff0c;对于不预览、不比对内容而直接下载带来的问题本站不予受理。2.下载的文档&#xff0c;不会出现我们的网址水印。3、该文档所得收入(下载内容预览)归上传者、原创作者&#x…

linux资源隔离是哪些,【转载】Linux cgroup资源隔离各个击破之

Linux cgroup 有两个子系统支持CPU隔离。一个是cpu子系统&#xff0c;另一个是cpuset子系统。cpu子系统根据进程设置的调度属性&#xff0c;选择对应的CPU资源调度方法.1. 完全公平调度 Completely Fair Scheduler (CFS)原理详见CFS用于处理以下几种进程调度策略SCHED_OTHERSCH…

14秋《c语言程序设计》作业2,《C语言程序设计》 作业参考答案.doc

作业参考答案一、单项选择1&#xff0e; B    2&#xff0e; D    3&#xff0e; B    4&#xff0e; D    5&#xff0e; B    6&#xff0e; B7&#xff0e; C    8&#xff0e; D    9&#xff0e; D 10&#xff0e;C 11&#xff0e;B 12&#…

华中科技大学c语言期末考试题,华中科技大学C语言期末考库剖析.docx

华中科技大学C语言期末考试题库试题及答案汇总1&#xff0e;设int a12&#xff0c;则执行完语句aa-a*a后&#xff0c;a的值是__D____。A、552 B、264 C、144 D、-264知识点&#xff1a;算术表达式2&#xff0e;以下变量x、y、z均为double类型且已正确赋值&#xff0c;不能正确表…

网页版bpc电波对时_科普向:无需联网却能自动对时的钟表

有一种神秘的钟表&#xff0c;它能够自动对时&#xff0c;却不需要联网&#xff0c;它十分准时&#xff0c;和传说中的的原子钟的误差也仅有几毫秒&#xff0c;它十分小众&#xff0c;却也随处可见&#xff0c;它就是电波表。今天猫头我就跟大家说说这个电波表。首先什么是电波…

动感灯箱制作流程培训_2000多年的灯箱发展史,你知道多少?

灯箱作为日常广告标识业务的重要板块&#xff0c;相信每个标识人都已经非常熟悉了&#xff0c;国内标识人也经常去学习相关新工艺新案例&#xff0c;但其实很多人不知道世界上最早的灯箱可能是中国人制作的哦~接下来就带大家一起揭开灯箱的前世今生&#xff0c;并详细盘点一下如…

c语言程序设计基础1千克,c语言学习知识编程经典编辑题汇总整编.doc

c语言学习知识编程经典编辑题汇总整编.doc - C语言编程基础习题汇总1.设计一个由键盘输入三个整数&#xff0c;求这三个数的平均数的程序。2.编写一个程序&#xff0c;用于水果店售货员结账。已知苹果每斤2.50元&#xff0c;鸭梨每斤1.80元&#xff0c;香蕉每斤2元&#xff0c;…

cp 过程中目录突然挂了_怎么解决管材激光切割机切管过程中出现的过烧及挂渣...

近年来&#xff0c;随着激光切割机的发展&#xff0c;不仅被用于切割平面板材&#xff0c;而且被应用于切割管材&#xff0c;我们称之为“管材激光切割机”。那么管材激光切割机用于切割管材时是否会出现问题呢&#xff0c;是的&#xff0c;确实出现了问题。由于管材的封闭性&a…

C语言填空题10道,3道C语言填空题,谁帮忙做下,谢谢

3道C语言填空题&#xff0c;谁帮忙做下&#xff0c;谢谢0功能&#xff1a;输出两个整数中大的那个数&#xff0c;两个整数由键盘输入。#include #include int main(){int a,b,*p1,*p2;p1(int *)malloc(sizeof(int));p2(int*)malloc(sizeof(int));scanf("%d%d",__(1)_…

大学计算机课程考试系统C语言题库,《大学计算机基础》考试题库(含答案).doc...

《大学计算机基础》试题题库及答案一、单选题练习 1&#xff0e;完整的计算机系统由( C )组成。A&#xff0e;运算器、控制器、存储器、输入设备和输出设备B&#xff0e;主机和外部设备C&#xff0e;硬件系统和软件系统D&#xff0e;主机箱、显示器、键盘、鼠标、打印机2&…

识别产品外观的合格软件_你还在犹豫?外观检测设备使用已成主流!

今天跟大伙聊一聊关于各种瓶子的外观检测/视觉检测。我们都知道&#xff0c;不管是瓶子、杯子还是其他的&#xff0c;在生产过程种对产品的质量检测这种有着超高重复性动作与随机应变能力的工作&#xff0c;在以前的工业时代&#xff0c;完全依靠人“人眼识别”人工检测来完成&…

go 调用c语言,golang之调用C语言代码

此篇教程只是简单的描述怎么使用以及遇到的一些错误我写的实例&#xff0c;C语言与golang在同一个文件中&#xff0c;并没有分开。我这里演示两个例子&#xff1a;⑴ 调用C语言函数打印“Hello World”#include void PrintHello(){ printf("Hello World!\n");}c代…

jsessionid每次请求都在变_为什么每次沟通都变争吵,学会这4条沟通原则,解决90%的沟通问题...

沟通重要吗&#xff1f;太重要了&#xff0c;可以这么说&#xff0c;我们在生活中遇到的绝大部分问题其实都是沟通问题。你的身边有这样的对话吗&#xff1f;老婆对丈夫说&#xff1a;“老娘当初瞎眼了才看上你&#xff0c;成天就知道打牌“妈妈对儿子说&#xff1a;”你看看人…

c语言long说明符,C语言-类型说明符 long,short,unsigned,signed

类型说明符基本概念C 语言提供了一下四种说明符,四个都属于关键字;short短型等价于 short intlong 长型 等价于 long intsigned 有符号型unsigned 无符号型这些说明符一般就是用来修饰 int 类型的,所以在使用时可以省略 intshort和 longshort 和 long 可以提供不同长度的整型数…