当硬盘100%满时,fwrite(比如说1000字节)返回0 [失败,如预期] 但是当硬盘的空闲空间很小时说600Bytes,那么fwrite(1000字节)就不行了 返回0 [失败]但返回说300字节,再次调用fwrite仍然返回300bytes,fwrite永远不会失败,即使我们调用100次?
错误号没有正确设置为28.我的问题是为什么fwrite的行为?这是正确的吗?如果fwrite返回少于我们要写的字节,那么这意味着磁盘已满?
是否有建议处理这种情况?
答案 0 :(得分:3)
成功时,
fread()
和fwrite()
会返回读取或写入的项目数。此数字等于仅在大小为1时传输的字节数。如果发生错误或达到文件末尾,则返回值为短项目计数(或零)。
因此,短写操作表示存在错误,应查询errno
以查看写操作未完成的原因。在咨询errno
之后,Mat的回答解释了(并且C标准基本相同,除了它使用术语 indeterminate ),错误后文件位置无效,所以尝试在故障定义不明确之后继续使用它。
答案 1 :(得分:1)
POSIX说这是关于fwrite
:
如果发生错误,则未指定流的文件位置指示符的结果值。
这意味着在同一个流上重复相同的fwrite
是代码中的错误 - 您不知道流的位置,因此尝试写入它根本不是一个好主意。
您处理此问题似乎已经在进行:在短errno
之后检查fwrite
并执行适合您的应用的任何内容。