分类: 系统运维
2012-03-28 12:53:21
可以使用read函数从打开的文件里读取数据:
#include
ssize_t read(int filedes, void *buf, size_t nbytes);
返回读取到的字节数,文件结尾则返回0,错误返回-1
以下几种情况会造成实际读取的字节数比请求的数量少:
1、在读一个普通文件时,如果在读入请求的字节数之前碰到了文件尾。比如,在请求读取100字节时,只剩30字节就到文件末尾了,read返回30。下次我们调用read时,它会返回0(文件末尾。)
2、当从一个终端设备读数据时。通常,一次最多只能读一行。(我们将在18章展示如何改变它。)
3、当从网络上读数据时。网络的缓冲区可能会导致读入的比请求的少。
4、当从一个管道或FIFO中读数据时。如果管道包含比请求量少的字节,read会只返回可用的字节数。
5、当从一个面向记录(record-oriented)设备读入数据时。一些面向记录的设备,比如磁带(magnetic type),一次可以最多返回一个记录。
6、当被一个信号中断,而只读了部分数据时。我们在10.5节深入讨论。
read操作从文件当前偏移量开始。在成功返回前,偏移量会增加实际读取的字节数。
POSIX.1改过几次这个函数的原型。经典的定义是:
int read(int filedes, char *buf, unsigned nbytes);
首先,第二个参数从char *变为void *来与ISO C保持一致:void *用来表示范型。
其次,返回值必须是一个有符号整型(ssize_t)来返回一个正的字节数、0(表示文件结尾)或-1(表示错误)。