转自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;

}

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

int main()

{

char buf[] = {};

int ret;

int flags;

//使用非阻塞io

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

{

perror("fcntl");

return -;

}

flags |= O_NONBLOCK;

if(fcntl(STDIN_FILENO, F_SETFL, flags) < )

{

perror("fcntl");

return -;

}

while()

{

sleep();

ret = read(STDIN_FILENO, buf, );

if(ret == )

{

perror("read--no");

}

else

{

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

}

write(STDOUT_FILENO, buf, );

memset(buf, , );

}

return ;

}

linux socket设置阻塞与非阻塞

非阻塞IO 和阻塞IO: 在网络编程中对于一个网络句柄会遇到阻塞IO 和非阻塞IO 的概念, 这里对于这两种socket 先做一下说明:       基本概念: 阻塞IO:: socket 的阻塞模式 ...

Linux下的串口编程及非阻塞模式

本篇介绍了如何在linux系统下向串口发送数据.包括read的阻塞和非阻塞.以及select方法. 打开串口 在Linux系统下,打开串口是通过使用标准的文件打开函数操作的. #include &lt ...

Linux设备驱动中的阻塞和非阻塞I&sol;O

[基本概念] 1.阻塞 阻塞操作是指在执行设备操作时,托不能获得资源,则挂起进程直到满足操作所需的条件后再进行操作.被挂起的进程进入休眠状态(不占用cpu资源),从调度器的运行队列转移到等待队列,直到 ...

linux下串口的阻塞和非阻塞操作

有两个可以进行控制串口阻塞性(同时控制read和write):一个是在打开串口的时候,open函数是否带O_NDELAY:第二个是可以在打开串口之后通过fcntl()函数进行控制. 阻塞的定义: 对于 ...

Linux设备驱动中的IO模型---阻塞和非阻塞IO【转】

在前面学习网络编程时,曾经学过I/O模型 Linux 系统应用编程——网络编程(I/O模型),下面学习一下I/O模型在设备驱动中的应用. 回顾一下在Unix/Linux下共有五种I/O模型,分别是: ...

《linux设备驱动开发详解》笔记——8阻塞与非阻塞IO

8.1 阻塞与非阻塞IO 8.1.0 概述 阻塞:访问设备时,若不能获取资源,则进程挂起,进入睡眠状态:也就是进入等待队列 非阻塞:不能获取资源时,不睡眠,要么退出.要么一直查询:直接退出且无资源时, ...

从linux源码看socket的阻塞和非阻塞

从linux源码看socket的阻塞和非阻塞 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情. 大部分高性能网络框架采用的是非阻塞模式.笔者这次就从linux ...

Linux设备驱动中的阻塞和非阻塞I&sol;O &lt&semi;转载&gt&semi;

Green 博客园 首页 新随笔 联系 订阅 管理 Linux设备驱动中的阻塞和非阻塞I/O   [基本概念] 1.阻塞 阻塞操作是指在执行设备操作时,托不能获得资源,则挂起进程直到满足操作所需的条件 ...

简述linux同步与异步、阻塞与非阻塞概念以及五种IO模型

1.概念剖析 相信很多从事linux后台开发工作的都接触过同步&异步.阻塞&非阻塞这样的概念,也相信都曾经产生过误解,比如认为同步就是阻塞.异步就是非阻塞,下面我们先剖析下这几个概念分 ...

随机推荐

前端CSS规范整理&lowbar;转载、、、

一.文件规范 1.文件均归档至约定的目录中. 具体要求通过豆瓣的CSS规范进行讲解: 所有的CSS分为两大类:通用类和业务类.通用的CSS文件,放在如下目录中: 基本样式库 /css/core 通用U ...

hibernate笔记--cascade级联以及inverse属性

cascade : 不管是单向多对一还是一对多,或者是双向的一对多关系,在一的一端映射文件中有一个set标签,在多的一端有many-to-one标签,拿前几篇笔记里讲的Grade和Student举例, ...

【1-5】jQuery对象和DOM对象

1 jQuery对象转化为DOM对象: var $cr = $("#cr");//获得jQuery对象 var cr = $cr[0];//转化为DOM对象 或者:var cr = ...

使用getElementById获取xml中的指定元素

Document有一个getElementById的方法,在文档中的解释是:     返回具有带给定值的 ID 属性的 Element.如果不存在此类元素,则此方法返回 null.如果多个元素具有带该 ...

给jdk写注释系列之jdk1&period;6容器&lpar;13&rpar;-总结篇之Java集合与数据结构

是的,这篇blogs是一个总结篇,最开始的时候我提到过,对于java容器或集合的学习也可以看做是对数据结构的学习与应用.在前面我们分析了很多的java容器,也接触了好多种常用的数据结构,今天 ...

spark-shell - 将结果保存成一个文件

sqlContext.sql("""    SELECT user_no,cust_id,oper_code     FROM cui.operation_data_an ...

Android 开机启动通知

效果图: 学习: 1.静态注册实现开机启动

linux非阻塞输入函数,Linux fcntl函数设置阻塞与非阻塞相关推荐

  1. c 如何加函数锁linux,Linux下C语言中fcntl函数用法说明

    本文最后更新于2017年8月18日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢! =Start= 缘由: 学习.提高需要 正文: 参考解答: fcntl – manipulate f ...

  2. qt文件选择对话框 linux,Linux下QT实现自定义对话框以及设置模态和非模态对话框...

    最近使用QT做毕业设计,其中用到了对话框,但系统默认的对话框不能满足我的需求,于是决定自己来封装一个,这需要根据QT提供的QDialog基类来建立,以下附上头文件及实现文件,已测试通过. #ifnde ...

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

    转自http://www.cnblogs.com/xuyh/p/3273082.html 用命令F_GETFL和F_SETFL设置文件标志,比如阻塞与非阻塞 F_SETFL     设置给arg描述符 ...

  4. java main方法调用非静态方法_java中main函数怎么调用外部非static方法

    展开全部 方法可以分为静态方法和实例方法 在main函数里调用非static方法(实例方法),那么32313133353236313431303231363533e78988e69d833133336 ...

  5. linux下阻塞的系统调用,Linux下socket设置为非阻塞方式和fcntl系统调用.pdf

    Linux 下 socket 设置为非阻塞方式和 fcntl 系统调用 [ 日期: 2011-04-16] 来源: Linux 社区 作者: Linux 用以下方法将 socket 设置为非阻塞方式 ...

  6. linux read函数非阻塞,C/C++ open函数的阻塞和非阻塞

    调用open函数时,可以指定是以阻塞方式还是以非阻塞方式打开一个文件描述符. 阻塞方式打开: int fd = open("/dev/tty", O_RDWR|O_NONBLOCK ...

  7. Linux 设备驱动中的 I/O模型(一)—— 阻塞和非阻塞I/O

    在前面学习网络编程时,曾经学过I/O模型 Linux 系统应用编程--网络编程(I/O模型),下面学习一下I/O模型在设备驱动中的应用. 回顾一下在Unix/Linux下共有五种I/O模型,分别是: ...

  8. linux系统编程之文件与I/O(六):fcntl 函数与文件锁

    2013-05-14 11:26 8290人阅读 评论(2) 收藏 举报  分类: linux系统编程(19)  版权声明:本文为博主原创文章,未经博主允许不得转载. 一.fcntl函数 功能:操纵文 ...

  9. Linux 文件锁 fcntl 函数详解

    Linux 文件锁 fcntl 函数详解 #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd); ...

最新文章

  1. mysql主从结构主数据库_mysql主从结构主数据库
  2. concat和concat_ws()区别及MySQL的几个实用字符串函数
  3. java 顺序栈_java用顺序栈实现数制转换 求完整程序!!
  4. 1、lombok的初始使用
  5. 渗透测试报告标准编写
  6. 【招聘(深圳)】敢为软件技术有限公司 .Net 工程师
  7. 潘淳:国士无双《微软技术俱乐部(苏州)成立大会暨微软技术交流会介绍》附专题视频...
  8. html 图像 ppt,用HTML设置的文本和图像.ppt
  9. 电脑的基本按键功能有哪些?
  10. BiANet:用于快速高效实现RGB-D数据显著性目标检测的双边注意力模型
  11. java邮箱和手机发送链接和验证码_java发送邮箱验证码
  12. C/C++语言函数之strlen函数用法
  13. 协同过滤推荐算法(一)原理与实现
  14. 做知识付费,这十大知识付费平台一定要知道
  15. 基于百度飞桨的单/多镜头行人追踪(非官方Baseline)
  16. vivo商城促销系统架构设计与实践-概览篇
  17. 如何在CSDN博客左侧添加微博关注
  18. 【软考中级】多媒体应用设计师复习笔记第六章
  19. Graph Theory 离散数学第六章
  20. Web UI自动化框架大比拼

热门文章

  1. 设计模式学习笔记(5) - 策略模式
  2. 深入C++的new(2011-11-15 15:08 )
  3. 配置windows 2003 ×××服务器
  4. Linux 命令(80)—— chown 命令
  5. Python之with语句
  6. 树形DP(简单题)(Y HDU4705)
  7. eclispe dev tools
  8. IDEA下SSM项目搭建的基本操作
  9. CountDownLatch和Semaphore使用场景
  10. json在线格式化【推荐】