如果你使用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);
我找不到任何可能发生的地方的参考,所以我认为它是未定义的。
答案 0 :(得分:5)
POSIX将数据定义为零字节: http://www.unix.com/man-page/POSIX/3posix/fseek/
fseek()函数应允许将文件位置指示符设置为超出文件中现有数据的末尾。如果此时稍后写入数据,则后续读取间隙中的数据应返回值为0的字节,直到数据实际写入间隙为止。
答案 1 :(得分:5)
它都是零。事实上,如果你跳过足够的时间来跳过整个块,UNIX就会把它们称为稀疏文件,只会分配你写入的块,如果你以后尝试从那些从未写入的块读取,它没有读取磁盘,只是假装有一个全零的块并返回你要求的部分。