Linux 文件IO之read() 函数

Linux中最常见的读取文件系统调用是read()。

#include <unistd.h>
ssize_t read (int fd, void *buf, size_t len); 
从fd指向的文件读取len个字节到buf中,成功返回buf中的字节数,失败返回-1.

对read()调用可能会有许多结果:

  1. 返回一个等于len的值,所有字节存入buf中。
  2. 返回一个大于0小于len的 值,该情况出现在一个信号打断了读取过程或读取中发生错误,有效字节大于0小于len或文件已抵达EOF.
  3. 返回0,标志EOF,无数据可读。
  4. 调用阻塞,无可用数据读取。
  5. 返回-1,且errno设置为EINTR。表示读取前收到一个信号,可以重新调用,

非阻塞IO:在没有数据可读时,让调用立即返回。open()给定flags参数为O_NONBLOCK。

read()有大小限制,其返回值ssize_t,其是有符号的size_t类型。在32位系统上,size_t定义为:
typedef unsigned int size_t
64位定义位 typedef unsigned long size_t
ssize_t的最大值为SSIZE_MAX,在32位系统上为0x7fffffff。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值