用read函数从打开的文件中读取数据。
#incldue <unistd.h>
ssize_t read(int fd, void *buf, size_t nbyte);
返回值:读到的字节数,若已到文件尾,返回0;若出错,返回-1
如果read成功,则返回读到的字节数,如已到达文件的尾端,则返回0.有多种情况可使实际读到的字节数少于要求的字节数:
读普通文件时,在读到要求字节数之前到达了文件尾端。例如,若在到达文件尾端之前有30个字节,而要求读100个字节,则read返回30.下一次载调用read时,它将返回0(文件尾端)。
当从终端设备读时,通常一次最多读一行。
当从网络读时,网络中的缓冲机制可能造成返回值小于所要求的字节数。
当从管道或FIFO读时,如若管道包含的字节数少于所需的数量,那么read将只返回实际可用的字节数。
当从某些面向记录的设备(如磁带)读时,一次最多返回一个记录。
当一信号造成中断,而已经读了部分数据量时。
读操作从文件的当前偏移量处开始,在成功返回之前,该偏移量将增加实际读到的字节数。
int read(int fd, char *buf, unsigned nbyte);
首先,为了与ISO C一致,第二个参数由char *改为void *。在ISO C中类型void *用于表示通用指针。
其次,返回值必须是一个带符号整型(ssize_t),以保证能够返回正整数字节数、0(表示文件尾端)或-1(出错)。
最后,第三个参数在历史上是一个无符号整型,这允许一个16为实现一次读或写的数据可以多达个字节。ssize_t提供带符号的返回值,size_t提供不带符号的返回值。
write函数
调用write函数想打开文件写数据。
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t nbytes);
返回值:若成功,返回写的字节数;若出错,返回-1.
其返回值通常与参数nbytes的的值相同,否则表示出错,write出错的一个常见原因是磁带写满,或者超过了一个给定进程的文件长度限制。
对于普通文件,写操作从文件的当前便宜量出开始。如果在打开该文件时,指出了O_APPEND选项,则在每次写操作之前,将文件偏移量设置为在文件当前结尾处。在一次成功写之前,该文件偏移量增加实际写的字节数。