2011-01-20 68 views
1

在Linux机器上,写入返回值c

写入文件的write()或writev()写入的写入次数少于给定的字节的原因是什么?

我知道它的一个有效的返回值返回> 0,<你给写调用的大小,但我很好奇,为什么这应该发生在所有....

回答

5

有在the documentation列出的几个原因,包括:

  • 如果更多的字节被写入比有空间(例如,进程的文件大小限制或物理一个write()请求一个介质的末尾),只有有足够空间的字节才能被写入。

  • 如果write()在成功写入一些数据后被信号中断,它将返回写入的字节数。

+1

几个问题与这个答案。 1)信号不能中断,除非你设置了一个信号处理程序并且未能指定`SA_RESTART`。 2)对于普通文件,除非磁盘已满,否则`write`不应该返回一个短写。但是对于套接字,管道和设备,有很多原因,例如缓冲区大小有限,为什么`write`可能发送的数据少于您的要求。有时这些原因仅适用于非阻塞模式;完整的答案很复杂。 – 2011-01-20 04:07:31

0

这可能发生,如果卷空间不足或用户超出配额。