-
直接转换方法:从数据流图到模块结构图的read函数
资源介绍
3.7 read函数
用r e a d函数从打开文件中读数据。
#include
ssize_t read(int f i l e d e s, void *b u f f, size_t n b y t e s) ;
返回:读到的字节数,若已到文件尾为 0,若出错为- 1
如r e a d成功,则返回读到的字节数。如已到达文件的尾端,则返回 0。
有多种情况可使实际读到的字节数少于要求读字节数:
• 读普通文件时,在读到要求字节数之前已到达了文件尾端。例如,若在到达文件尾端之
前还有3 0个字节,而要求读1 0 0个字节,则 r e a d返回3 0,下一次再调用r e a d时,它将返回0 (文件
尾端)。
• 当从终端设备读时,通常一次最多读一行 (第11章将介绍如何改变这一点 )。
• 当从网络读时,网络中的缓冲机构可能造成返回值小于所要求读的字节数。
• 某些面向记录的设备,例如磁带,一次最多返回一个记录。
读操作从文件的当前位移量处开始,在成功返回之前,该位移量增加实际读得的字节数。
P O S I X . 1在几个方面对此函数的原型作了更改。其经典定义是:
int read(int f i l e d e s, char *b u f f, unsigned n b y t e s) ;
首先,为了与ANSI C一致,其第二个参数由char *改为void *。在ANSI C中,类型void *用于表
示类属指针。其次,其返回值必须是一个带符号整数( s s i z e _ t),以返回正字节数、0(表示文
件尾端)或-1(出错)。最后,第三个参数在历史上是一个不带符号整数,以允许一个 1 6位的
实现可以一次读或写至 6 5 5 3 4个字节。在1990 POSIX.1标准中,引进了新的基本系统数据类型
4 0 U N I X环境高级编程