Linux 文件IO之read() 函数

本文详细介绍了Linux系统中read()系统调用的功能和使用方法。read()用于从文件描述符读取指定长度的数据到缓冲区,返回实际读取的字节数,或在遇到错误或文件结束时返回特定值。文章还解释了read()调用可能的各种结果及非阻塞IO的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值