非阻塞 I/O 使我们可以调用 open、write 和 read 这样的 I/O 操作,并使这些操作不会永远阻塞。如果这种操作不能完成,则立即出错返回,表示该操作若继续执行将阻塞。
对于一个给定的文件描述符由以下两种方法可以对其指定非阻塞 I/O:
对于一个给定的文件描述符由以下两种方法可以对其指定非阻塞 I/O:
- 若调用 open 获得描述符,则可指定 O_NONBLOCK 标志;
- 对已打开的描述符,可以使用 fcntl,由该函数打开 O_NONBLOCK 文件状态标志;
测试程序:
#include "apue.h"
#include <fcntl.h>
void set_fl(int fd, int flags);
void clr_fl(int fd, int flags);
char buf[500000];
int main(void)
{
int ntowrite, nwrite;
char *ptr;
ntowrite = read(STDIN_FILENO, buf, sizeof(buf));
fprintf(stderr, "read %d bytes.\n",ntowrite);
set_fl(STDOUT_FILENO, O_NONBLOCK);
ptr = buf;
while(ntowrite > 0)
{
errno = 0;