3.7 read函数
调用read函数从打开文件中读数据。

如read成功,则返回读到的字节数。如已到达文件结尾,则返回0。有多种情况可使实际读到的字节数少于要求读的字节数:
• 读普通文件时,在读到要求字节数之前已到达了文件尾端。例如,若在到达文件尾端之前还有30个字节,而要求读100个字节,则read返回30,下一次再调用read时,它将返
回0(文件尾端)。
• 当从终端设备读时,通常一次最多读一行(第18章将介绍如何改变这一点)。
• 当从网络读时,网络中的缓冲机构可能造成返回值小于所要求读的字节数。
• 当从管道或FIFO读时,如若管道包含的字节少于所需的数量,那么read将只返回实际可用的字节数。
• 当从某些面向记录的设备(例如磁带)读时,一次最多返回一个记录。
• 当某一信号造成中断,而已经读了部分数据量时。我们将在10.5节进一步讨论此种情况。读操作从文件的当前偏移量处开始,在成功返回之前,该偏移量将增加实际读到的字节数。POSIX.1从几个方面对read函数的原型作了更改。其经典定义是:
• 首先,为了与ISO C保持一致,将第二个参数由char*改为void*。在ISO C中,类型void*用于表示通用指针。
• 其次,其返回值必须是一个带符号整数(ssize_t),以返回正字节数、0(表示文件尾端)或-1(出错)。
• 最后,第三个参数在历史上是一个不带符号整数,这允许一个16位的实现一次读或写的数据可以多达65 534个字节。在1990 POSIX.1标准中,引入了基本系统数据类型ssize_t以提供带符号的返回值,不带符号的size_t则用于第三个参数(见2.5.2节中的SSIZE_MAX常量)。







