8、基础文件输入输出操作详解

基础文件输入输出操作详解

1. read 系统调用

read 系统调用用于从文件描述符中读取数据,其函数原型如下:

#include <unistd.h>
ssize_t read(
    int fd,         /* 文件描述符 */
    void *buf,      /* 接收数据的地址 */
    size_t nbytes   /* 要读取的字节数 */
);
/* 返回读取的字节数,文件结束返回 0,出错返回 -1 并设置 errno */

它与 write 系统调用相反,从由 fd 表示的打开文件中读取 nbytes 字节到 buf 指向的地址。读取从文件偏移量的当前位置开始,然后文件偏移量会增加读取的字节数。read 不受 O_APPEND 标志的影响。

与 write 不同,read 系统调用不能先传递数据再稍后读取。如果数据不在缓冲区缓存中,进程必须等待内核从磁盘获取数据。有时,内核会通过提前读取来加速顺序读取。

当进行部分读取时,由于短计数不是错误,errno 无效,需要猜测问题所在。如果需要读取全部数据,最好在循环中调用 read,例如 readall 函数:

ssize_t readall(int fd, void *buf, size_t nbyte)
{
    ssize_t nread = 0, n;
    do {
        if ((n = read(fd, &((char *)buf)[nread], nbyte - 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值