2011-01-20 64 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

這可能發生,如果卷空間不足或用戶超出配額。