12.5 I/O多路转接当从一个描述符读,然后又写到另一个描述符时,可以在下列形式的循环中使用阻塞I / O: while ( (n=read(STDIN_FILENO, buf, BUFSIZ) ) > 0) if (write (STDOUT_FILENO, buf, n) != n) err_sys (write error”) ;这种形式的阻塞I / O到处可见。但是如果必须读两个描述符又将如何呢?如果仍旧使用阻塞I / O,那么就可能长时间阻塞在一个描述符上,而另一个描述符虽有很多数据却不能得到及时处理。所以为了处理这种情况显然需要另一种不同的技术。让我们概略地观察一个调制解调器拨号程序的工作情况(该程序将在第1 8章中介绍)。该程序读终端(标准输入),将所得数据写到调制解调器上;同时读调制解调器,将所得数据写到终端上(标准输出)。

在I/O多路复用的场景中,阻塞I/O的问题可以通过使用非阻塞I/O或者异步I/O来解决。非阻塞I/O允许程序在等待一个操作完成的同时进行其他操作,而异步I/O则完全消除等待时间。相关的资源可以帮助进一步理解这些技术。

例如,关于Java非阻塞I/O使用方法的文章详细解释了如何在Java中实现非阻塞I/O,这对于需要处理多个输入输出的程序非常有用。而Linux设备驱动中的阻塞与非阻塞I/O一文则提供了Linux环境下的具体实现和应用示例,帮助开发者在实际操作中应用这些概念。

详解socket阻塞与非阻塞同步与异步I/O模型的内容更加侧重于网络编程,介绍了如何在网络通信中使用这些I/O模型来提高效率和响应速度。

还有一篇关于网络编程高级应用I/O阻塞与非阻塞操作应用的文章,该文提供了更高级的网络编程技巧,帮助开发者在复杂的网络环境中实现高效的I/O操作。