read函数
1.函数原型
#include<unistd.h>
size_t read(int fd, void* but, size_t nbytes);
返回值:成功返回读到的字节数,如果在文件末尾返回0,失败返回-1.
2.如果读到字节数少于需求的字节数的情况
1.当读入普通文件的时候,如果在读取出要求的字节数之前到达了文件的末尾。
比如:文件里面还有30个字节没有读区,但是我们要求读100个,这次读取返回30,下次返回0(end of file).
2.当从终端设备读取的时候。正常,一次读取一行
3.当从网络读取的时候。在网络里面的buffer可能会使返回的字节总数少于要求数。
4.当从pipe或者FIFO读取的时候。,如果pipe里面的字节数少于需求的,那么只会返回可提供的。
5.当从记录设备里面读取的时候。一些记录设备,比如磁带,每次会返回一个记录。
6.当被信号中断时,会返回已经被读入的数据。
3.其它事项
读操作从文件当间偏移量开始,在成功返回之前,文件当前偏移量增加读入的字节数。
write函数
1.函数原型
#include<unistd.h>
ssize_t write(int fd, const void* but, size_t nbytes);
函数返回值:成功返回写入的字节数,失败返回-1.
返回值通常等于nbytes,不然的话,会产生一个错误。
通常引起write error的原因是磁盘空间满了,或者操作超出了文件大小限制。
对于一个普通文件,写操作从文件当前偏移量开始,如果如果O_APPEND在文件打开时被设置了,在写操作之前将文件当前偏移量
设置为文件末尾。在写入成功之后,文件偏移量增加写入的字节数。