read函数和write函数

用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选项,则在每次写操作之前,将文件偏移量设置为在文件当前结尾处。在一次成功写之前,该文件偏移量增加实际写的字节数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值