读写文件

Unix系统通过 readwrite 系统调用完成文件的底层数据传输。

read 系统调用

  • 原型:ssize_t read(int fd, void *buf, size_t n)
  • 从文件描述符 fd 中读取最多 n 个字节到 buf
  • 返回值:实际读取的字节数。返回0表示文件结尾(EOF),返回-1表示错误。
  • 短计数(short count):实际读取的字节数可能小于请求的 n 字节,原因包括:
    • 读取普通文件时遇到EOF。
    • 从终端读取一行文本(通常以换行符结束)。
    • 从网络套接字读取时数据尚未到达。

write 系统调用

  • 原型:ssize_t write(int fd, const void *buf, size_t n)
  • buf 复制最多 n 个字节到文件描述符 fd
  • 返回值:实际写入的字节数,出错时返回-1。
  • write也可能发生短计数,但在普通磁盘文件中较少见。

ssize_t 与 size_t 的区别

  • size_t 是无符号整数类型,表示大小。
  • ssize_t 是有符号整数类型,允许返回-1表示错误。

链接到