繁体   English   中英

你可以通过过去的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/

fseek()函数应允许将文件位置指示符设置为超出文件中现有数据的末尾。 如果此时稍后写入数据,则后续读取间隙中的数据将返回值为0的字节,直到数据实际写入间隙。

它都是零。 事实上,如果你跳过足够远的地方跳过整个块,UNIX将会生成所谓的稀疏文件,只会分配你写入的块,如果你以后尝试从那些从未写过的块读取,它就不会读取磁盘,它只是假装有一个全零的块并返回你要求的部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM