你可以通过 fseek 过去的 EOF 创建未定义的数据吗?

Can you create undefined data by fseeking past EOF?

如果你使用fseek越过文件末尾然后在EOF之后追加数据,EOF和你写入的内容之间的数据是否未定义?

比如下面的代码,会不会因为randomLengthPastEOF写入的文件中有10个字节未定义的数据?

unsigned char *someText= "ExampleText";
int length = 11;
int randomLengthPastEOF  = 10;

FILE *output = fopen("/Example/FilePath", "wb");
fseek(input, randomLengthPastEOF ,SEEK_END);
fwrite(someText, 1, length, output);

我无法在任何地方找到可能发生的事情的参考,所以我假设它是未定义的。

POSIX 将中间的数据定义为零字节: http://www.unix.com/man-page/POSIX/3posix/fseek/

The fseek() function shall allow the file-position indicator to be set beyond the end of existing data in the file. If data is later written at this point, subsequent reads of data in the gap shall return bytes with the value 0 until data is actually written into the gap.

全部为零。事实上,如果你跳过足够远以跳过整个块,UNIX 将生成所谓的稀疏文件,只分配你写入的块,如果你稍后尝试从从未写入的块中读取,它不会'不读取磁盘,它只是假装有一个全为零的块和 returns 您要求的部分。