1.何为异步IO

(1).几乎可以这么认为:异步IO就是操作系统用软件实现的一套中断响应系统.

(2).异步IO的工作方法:我们当前进程注册一个异步IO事件(使用signal注册一个信号SIGIO的处理函数),然后当前进程可以正常处理自己的事情,当异步事件发生后当前进程会收到一个SIGIO信号从而执行绑定的处理函数去处理这个异步事件.

2.涉及的函数:

(1).fcntl(F_GETFL\F_SETFL\O_ASYNC\F_SETOWN)

(2).signal或者sigaction(SIGIO)

3.代码实例:

 #include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/select.h>
#include <signal.h> int mousefd = -;
//绑定到SIGIO信号,在函数内处理异步通知事件
void func(int sig)
{
char buf[];
if(sig != SIGIO)
return;
memset(buf, , sizeof(buf));
read(mousefd, buf, );
printf("读出的鼠标:[%s]\n",buf);
} int main(void)
{
int flag = -;
char buf[];
mousefd = open("/dev/input/mouse0",O_RDONLY);
if(mousefd < )
{
perror("open:");
return -;
} //注册异步通知(把鼠标的文件描述符设置为可以接受异步IO)
flag = fcntl(mousefd, F_GETFL);
flag |= O_ASYNC;
fcntl(mousefd, F_SETFL, flag); //把异步IO事件的接收进程设置为当前进程
fcntl(mousefd, F_SETOWN, getpid()); //注册当前进程的SIGIO信号捕获函数
signal(SIGIO, func); //读键盘
while()
{
memset(buf, , sizeof(buf));
read(, buf, );
printf("读出的键盘:[%s] \n",buf);
}
return ;
}

最新文章

  1. BZOJ 2879: [Noi2012]美食节
  2. 【Python装饰者】在函数测试的作用
  3. [js/jquery]移动端手势拖动,放大,缩小预览图片
  4. [Jetty] jetty 内存调优
  5. mysql对GIS空间数据的支持,包括创建空间索引
  6. lua IDE for cocos2d-x development
  7. db2_errroecode
  8. vue--组件基础
  9. 手动设定统计数据 set_table_stats
  10. PHP类中self和$this的区别
  11. Java 调用Restful API接口的几种方式--HTTPS
  12. RocketMQ消息存储
  13. Aggressive cows
  14. php.ini配置说明
  15. Selenium启动最新的火狐浏览器异常排查
  16. Oracle查询备注信息
  17. Weinre(pc调试手机页面)
  18. iOS开发开辟线程总结--NSThread
  19. Linux内核协议栈相关资料链接
  20. LinQ 简介

热门文章

  1. created a ThreadLocal with key of type [oracle.jdbc.driver.AutoKeyInfo$1]
  2. c++程序—选择结构
  3. P1429 平面最近点对(加强版)(分治)
  4. 实训23 功能FC的建立与调用
  5. Spring配置数据源的三种方法
  6. 【转】ASP.NET Core MVC/WebAPi 模型绑定探索
  7. 【CF1154G】Minimum Possible LCM
  8. HDU 4901 多校4 经典计数DP
  9. js模式-观察者模式
  10. cf 1241 D. Sequence Sorting(思维)