10.3 读和写文件

read函数

ssize_t read(int fd, void *buf, size_t count);

read函数从描述符fd的当前位置拷贝最多n个字节到存储器位置buf

  • 返回-1 表示错误
  • 返回 0 表示EOF 注意这里不是返回EOF
  • 返回正整型 表示实际传送的字节数量

write函数

 ssize_t write(int fd, const void *buf, size_t count);  

write函数与read相反,是从存储器位置buf中拷贝count个字节到描述符fd的当前文件位置

ssize_t 和 size_t的区别

  • ssize_t 为int 有符号
  • size_t 为unsigned int 无符号

读和写返回不足值的情况

在某些情况下,write和read返回的字节比传入的字节数少,出现这种有以下原因:

  • 读文件时遇到EOF 文件剩余的字节数不够读满一次,返回0表示遇到EOF
  • 从终端读文本行 返回的是文本行的大小
  • 读和写网络套接字 引起read和write返回不足的因素有几个: 缓冲区大小,网络延迟等
    网络I/O的处理以后重点讲