Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1798339
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: 系统运维

2012-03-28 12:53:21

可以使用read函数从打开的文件里读取数据:


#include
ssize_t read(int filedes, void *buf, size_t nbytes);
返回读取到的字节数,文件结尾则返回0,错误返回-1


以下几种情况会造成实际读取的字节数比请求的数量少:


1、在读一个普通文件时,如果在读入请求的字节数之前碰到了文件尾。比如,在请求读取100字节时,只剩30字节就到文件末尾了,read返回30。下次我们调用read时,它会返回0(文件末尾。)


2、当从一个终端设备读数据时。通常,一次最多只能读一行。(我们将在18章展示如何改变它。)


3、当从网络上读数据时。网络的缓冲区可能会导致读入的比请求的少。


4、当从一个管道或FIFO中读数据时。如果管道包含比请求量少的字节,read会只返回可用的字节数。


5、当从一个面向记录(record-oriented)设备读入数据时。一些面向记录的设备,比如磁带(magnetic type),一次可以最多返回一个记录。


6、当被一个信号中断,而只读了部分数据时。我们在10.5节深入讨论。


read操作从文件当前偏移量开始。在成功返回前,偏移量会增加实际读取的字节数。


POSIX.1改过几次这个函数的原型。经典的定义是:
int read(int filedes, char *buf, unsigned nbytes);


首先,第二个参数从char *变为void *来与ISO C保持一致:void *用来表示范型。


其次,返回值必须是一个有符号整型(ssize_t)来返回一个正的字节数、0(表示文件结尾)或-1(表示错误)。

最后,第三个参数在历史上曾经是一个无符号整型,这是为了允许16位系统实现可以一次读写最多65,534字节。1990 Posix.1标准把原始数据类型ssize_t引来来提供有符号的返回值,而无符号的size_t用作第三个参数。
阅读(704) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~