使用 fseek 保留 space 安全吗?

Reserving space with fseek safe?

如果能保证seek之后还有数据要写入,用fseek在文件开头预留字节安全吗?例如:

// reserve space
fseek(f, 4096, SEEK_SET);

// ...

// write some data after the reserved space
fwrite(buf, 1, bufsize, f);

// go back to the reserved space (to update it)
rewind(f);

// ...

我注意到它适用于 Windows,但其他平台呢?有什么需要注意的问题吗?

是的,这很好用。只要您在 ww+ 模式下打开文件,而不是 aa+,您就可以搜索到文件中的任何点并在那里写入,它将在该点写入文件。文件的其他部分将保持不变;如果它们从未被写入,它们将包含零字节。

因此,如果您对刚在 w 模式下打开的文件执行以下操作(首先截断文件):

fseek(f, 10, SEEK_SET);
fwrite("abc", 1, 3, f);
rewind(f);
fwrite("1234567890", 1, 10, f);

文件内容为:

1234567890abc