【问题标题】:Reserving space with fseek safe?用 fseek 预留空间安全吗?
【发布时间】:2016-11-04 18:33:14
【问题描述】:

如果可以保证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 上运行,但是其他平台呢?有什么需要注意的问题吗?

【问题讨论】:

  • 它在 Unix 上不保留空间。在您写入并刷新输出之前,文件实际上不会发生任何事情。

标签: c io cross-platform fseek


【解决方案1】:

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

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

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

文件的内容是:

1234567890abc

【讨论】:

  • 哦,天哪,关于磁盘容量的要点。我想我以后会让fwrite成为标准。
  • 我认为检查磁盘容量是全部原因。 “预留”空间还有什么意义?
  • 我正在为稍后需要更新的文件格式标题保留空间。
  • “保留”是什么意思?对我来说,这意味着确保空间可用,并且不能被其他东西占用。
  • “reserve”是指将固定大小的数据块放在文件的某个位置,以便稍后在程序中更新(覆盖)它,而无需重新编写整个文件顺序。现在更有意义了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-23
相关资源
最近更新 更多