异步I/O

来源:互联网 发布:单片机就业待遇 编辑:程序博客网 时间:2024/05/20 06:30

 

异步I/O

信号机构提供了一种以异步的形式通知某种事件已发生的方法。由BSD和系统V派生的所有系统都提供了使用一个信号(在系统V中是SIGPOLL,在BSD系统中是SIGIO)的异步I/O方法,该信号通知进程,某个描述符已经发生了所关心的某个事件。

异步I/O的限制是每个进程只能有一个信号。如果要对几个描述符进行异步I/O,那么在该进程接收到该信号时,并不知道这个信号对应于哪一个描述符。

一、系统V异步I/O

在系统V中,异步I/OSTREAM系统的一部分。它只对STREAM设备和STREAM管道起作用。系统V的异步I/O信号是SIGPOLL

系统V异步I/O建立步骤:

1、   建立信号SIGPOLL的信号处理程序(signalsigaction函数建立)

2、   调用ioctl,它的第二个参数(request)I_SETSIG,第三个参数是产生SIGPOLL信号的条件,第三个参数具体实现见APUE page38714-7

 

二、BSD异步I/O

BSD派生的系统中,异步I/OSIGIOSIGURG两个信号的组合。前者是通用异步I/O信号,后者则只用来通知进程在网络就连接上到达了带外的数据。

BSD异步I/O建立步骤:

1、   调用signalsigacionSIGIO信号建立处理程序

2、   以命令F_SETOWN调用fcntl来设置进程ID和进程组ID,它们将接收对于该描述符的信号

3、   以命令F_SETFL调用fcntl设置O_ASYNC文件状态标志,使在该描述符上可以进行异步I/O

说明:第3步仅能对指向终端或者网络的描述符执行,这是BSD异步I/O设施的一个基本限制。

对于SIGURG信号,只能执行第12步。该信号仅对引用支持带外数据的网络描述符而产生。

 

 

原创粉丝点击