1、read()和write()
- 系统调用每次在文件和进程的地址空间之间传送一块连续的数据。
- 但是,应用有时也需要将分散在内存多处地方的数据连续写到文件中,或者反之。
- 在这种情况下,如果要从文件中读一片连续的数据至进程的不同区域,使用read()则要么一次将它们读至一个较大的缓冲区中,然后将它们分成若干部分复制到不同的区域,要么调用read()若干次分批将它们读至不同区域。
- 同样,如果想将程序中不同区域的数据块连续地写至文件,也必须进行类似的处理。
- 缺点: 多次系统调用或复制数据的开销。
2、readv()和writev()系统调用
它们只需一次系统调用就可以实现在文件和进程的多个缓冲区之间传送数据,免除了多次系统调用或复制数据的开销。
readv()
称为散布读,即将文件中若干连续的数据块读入内存分散的缓冲区中。writev()
称为聚集写,即收集内存中分散的若干缓冲区中的数据写至文件的连续区域中。
#include <sys/uio.h>