10.5 用 RIO 包健壮地读写
10.5 用 RIO 包健壮地读写
在这一小节里,我们会讲述一个 I/O 包,称为 RIO(Robust I/O,健壮的 I/O)包,它会自动为你处理上文中所述的不足值。在像网络程序这样容易出现不足值的应用中,RIO 包提供了方便、健壮和高效的 I/O。RIO 提供了两类不同的函数:
- 无缓冲的输入输出函数。 这些函数直接在内存和文件之间传送数据,没有应用级缓冲。它们对将二进制数据读写到网络和从网络读写二进制数据尤其有用。
- 带缓冲的输入函数。 这些函数允许你高效地从文件中读取文本行和二进制数据,这些文件的内容缓存在应用级缓冲区内,类似于为
printf这样的标准 I/O 函数提供的缓冲区。与 [110] 中讲述的带缓冲的 I/O 例程不同,带缓冲的 RIO 输入函数是线程安全的(12.7.1 节),它在同一个描述符上可以被交错地调用。例如,你可以从一个描述符中读一些文本行,然后读取一些二进制数据,接着再多读取一些文本行。
我们讲述 RIO 例程有两个原因。第一,在接下来的两章中,我们开发的网络应用中使用了它们;第二,通过学习这些例程的代码,你将从总体上对 Unix I/O 有更深入的了解。