底层文件访问之二:read系统调用
说明:本文主要是对man 帮助文档和《linux程序设计》第四版的摘录,部分理解来源于个人,请酌情参考。
接着上一篇的write,我们来学习一下read。
Read
系统调用read的作用是:从与文件描述符fd相关联的文件中读取 n bytes个字节的数据。并把它放入到数据区buf中。
概要:
read函数在<unistd.h>
头文件中定义。
原型是:ssize_t read(int fd, void *buf, size_t count);
说明:
read()函数尝试从文件描述符fd中读取count个字节到buf开头的缓冲区中。
如果count=0;read返回0,并且没有其他结果,如果count>SSIZE_MAX,结果未指定。
**ssize_t:**有符号整型,与long类似。typedef long size_t
size_t:无符号的ssize_t,:typedef unsigned long size_t
返回值
调用成功返回读取的字节数,文件指示符指到对应的位置。这个返回值可能会比count,比如以下情况:
当文件的整体字节比count小时,读到文件尾。
我们从管道或者终端读取
我们读取时被一个信号打断了等等情况。
调用失败的时候返回-1;并且errno会被设置,这时候文件的指示符位置变化与否是未知的。
可能出现的错误值有:
EAGAIN: