unix环境高级编程-高级IO(2)
2016-08-05 20:31
204 查看
函数readv和writev:这两个函数用于在一次函数调用中读、写多个非连续缓冲区。有时也将这两个函数成散布读(scatter read)和聚集写(gather write)
![](https://img-blog.csdn.net/20160805194722910)
函数readn和writen:
管道、FIFO以及某些设备(终端和网络)有以下性质:
1.一次read操作所返回的数据可能少于所要求的数据,即使还没达到文件尾端也可能是这样。
2.一次write操作的返回值也可能少于指定输出的字节数。这可能是由某个因素造成的,比如内核输出缓冲区变满,这也不是错误,应该继续写余下数据。
通常在读写一个管道、网络设备或终端时,需要考虑这些特性,readn和writen函数功能分别是读写指定的n字节数据,并处理返回值可能小于要求值的情况。
![](https://img-blog.csdn.net/20160805195900172)
存储映射IO:
存储映射IO能够将一个磁盘文件映射到存储空间的一个缓冲区上,当从缓冲区取数据时,就相当于读文件中的相应字节,同理,将数据存入缓冲区时,相应字节自动写入文件,这样就可以在不使用read和write情况下执行IO。
为了实现这种功能,应首先告诉内核将一个给定的文件映射到一个存储区域中,这是有mmap函数实现的。
![](https://img-blog.csdn.net/20160805201925019)
addr参数用于指定映射存储区的起始地址,通常将其设置为0,表示由系统选择该映射区的起始地址。
fd参数是指定要被映射文件的描述符。
prot参数制定了映射存储区的保护要求,如下图所示
函数readn和writen:
管道、FIFO以及某些设备(终端和网络)有以下性质:
1.一次read操作所返回的数据可能少于所要求的数据,即使还没达到文件尾端也可能是这样。
2.一次write操作的返回值也可能少于指定输出的字节数。这可能是由某个因素造成的,比如内核输出缓冲区变满,这也不是错误,应该继续写余下数据。
通常在读写一个管道、网络设备或终端时,需要考虑这些特性,readn和writen函数功能分别是读写指定的n字节数据,并处理返回值可能小于要求值的情况。
存储映射IO:
存储映射IO能够将一个磁盘文件映射到存储空间的一个缓冲区上,当从缓冲区取数据时,就相当于读文件中的相应字节,同理,将数据存入缓冲区时,相应字节自动写入文件,这样就可以在不使用read和write情况下执行IO。
为了实现这种功能,应首先告诉内核将一个给定的文件映射到一个存储区域中,这是有mmap函数实现的。
addr参数用于指定映射存储区的起始地址,通常将其设置为0,表示由系统选择该映射区的起始地址。
fd参数是指定要被映射文件的描述符。
prot参数制定了映射存储区的保护要求,如下图所示
相关文章推荐
- UNIX环境高级编程---------文件IO
- unix环境高级编程-高级IO
- unix环境高级编程-文件IO
- 3.UNIX 环境高级编程--文件 IO
- UNIX环境高级编程学习之第三章文件IO-文件写操作
- UNIX环境高级编程笔记——高级IO,进程间通信,套接字,高级进程间通信
- unix环境高级编程--不带缓冲的IO操作
- unix环境高级编程笔记--高级IO
- Unix环境编程-高级IO
- 【UNIX环境高级编程】文件 IO 操作 一 ( open | close | creat | lseek | write | read )
- UNIX环境高级编程学习之第三章文件IO-文件读操作
- unix环境高级编程--IO
- 文件io(二)--unix环境高级编程笔记
- UNIX环境高级编程学习之第三章文件IO-文件读偏移操作
- UNIX环境C语言编程(11)-高级IO
- Unix环境高级编程笔记:12、高级IO
- Unix环境高级编程:文件 IO 原子性 与 状态 共享
- UNIX环境高级编程学习之第五章标准IO-实现查看所有用户
- UNIX环境高级编程5.9二进制IO 输入输出流理解
- unix环境高级编程之unbuffered io