unix环境高级编程-高级IO(2)

函数readv和writev:这两个函数用于在一次函数调用中读、写多个非连续缓冲区。有时也将这两个函数成散布读(scatter read)和聚集写(gather write)



函数readn和writen:

管道、FIFO以及某些设备(终端和网络)有以下性质:

1.一次read操作所返回的数据可能少于所要求的数据,即使还没达到文件尾端也可能是这样。

2.一次write操作的返回值也可能少于指定输出的字节数。这可能是由某个因素造成的,比如内核输出缓冲区变满,这也不是错误,应该继续写余下数据。

通常在读写一个管道、网络设备或终端时,需要考虑这些特性,readn和writen函数功能分别是读写指定的n字节数据,并处理返回值可能小于要求值的情况。



存储映射IO:

存储映射IO能够将一个磁盘文件映射到存储空间的一个缓冲区上,当从缓冲区取数据时,就相当于读文件中的相应字节,同理,将数据存入缓冲区时,相应字节自动写入文件,这样就可以在不使用read和write情况下执行IO。

为了实现这种功能,应首先告诉内核将一个给定的文件映射到一个存储区域中,这是有mmap函数实现的。


addr参数用于指定映射存储区的起始地址,通常将其设置为0,表示由系统选择该映射区的起始地址。

fd参数是指定要被映射文件的描述符。

prot参数制定了映射存储区的保护要求,如下图所示

unix环境高级编程-高级IO(2)_第1张图片



你可能感兴趣的:(Linux)