Linux 文件IO之read() 函数

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

#include 
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。

你可能感兴趣的:(linux,Linux,Linux编程,文件IO)