C - lseek(fd, 100, SEEK_END) 将位置移动到文件"past the end" 100 个字节。如果我们在文件结束后读取和写入数据会发生什么?



跳过文件末尾lseek可以将当前位置设置为文件末尾之后的位置。例如,lseek(fd,100,SEEK_END(将位置移过文件末尾100个字节。现在I( 如果我们在文件结束后读取数据,会发生什么?ii(如果我们在文件结束后写入数据,会发生什么?

i(如果您在文件末尾之后读取,那么您将读取EOF,就像您在末尾一样。

ii(如果在文件末尾之后写入,则在末尾和开始写入的位置之间插入零个字节。所以序列

lseek(fd, 100, SEEK_END);
write(fd, buffer, size);

大致相当于

char zeros[100] = {0};
lseek(fd, 0, SEEK_END);
write(fd, zeroes, 100);
write(fd, buffer, size);

当您调用长度大于当前文件大小的truncate()ftruncate()时,也会发生这种情况——文件扩展为零字节。

最新更新