read、write函数

3.7 read函数
用r e a d函数从打开文件中读数据。
#include <unistd.h>
ssize_t read(intf i l e d e s, void *b u f f, size_tn 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(intf i l e d e s, char *b u f f, unsignedn 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标准中,引进了新的基本系统数据类型ssize_t 以提供带符号的返回值, s i z e t则被用于第三个参数(见表2 - 7中的S S I Z E M A X常数)。


3.8 write函数
用w r i t e函数向打开文件写数据。
#include <unistd.h>
ssize_t write(inft i l e d e s, const void b* u f f, size_tn b y t e s) ;
返回:若成功为已写的字节数,若出错为- 1
其返回值通常与参数n b y t e s的值不同,否则表示出错。w r i t e出错的一个常见原因是:磁盘已写满,或者超过了对一个给定进程的文件长度限制(见7 . 11节及习题1 0 . 11 )。对于普通文件,写操作从文件的当前位移量处开始。如果在打开该文件时,指定了O A P P E N D选择项,则在每次写操作之前,将文件位移量设置在文件的当前结尾处。在一次成功写之后,该文件位移量增加实际写的字节数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值