Pud*_*ler 2 c c++ fseek fwrite
如果您使用fseek超过文件的末尾然后在EOF之后附加数据,那么EOF和您编写的内容之间的数据是否未定义?
例如,在下面的代码中,写入的文件中是否会有10个字节的未定义数据,因为randomLengthPastEOF?
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);
Run Code Online (Sandbox Code Playgroud)
我找不到任何可能发生的地方的参考,所以我认为它是未定义的.
POSIX将数据定义为零字节:http: //www.unix.com/man-page/POSIX/3posix/fseek/
fseek()函数应允许将文件位置指示符设置为超出文件中现有数据的末尾.如果此时稍后写入数据,则后续读取间隙中的数据将返回值为0的字节,直到数据实际写入间隙.
小智 5
它都是零.事实上,如果你跳过足够远的地方跳过整个块,UNIX将会生成所谓的稀疏文件,只会分配你写入的块,如果你以后尝试从那些从未写过的块读取,它就不会读取磁盘,它只是假装有一个全零的块并返回你要求的部分.
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |