跳过文件末尾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()
时,也会发生这种情况——文件扩展为零字节。