c - 使用 fseek 保留空间安全吗?

标签 c io cross-platform fseek

如果可以保证查找后有数据写入,那么使用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

关于c - 使用 fseek 保留空间安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40429643/

相关文章:

c++ - 在 C++ 中的 #pragma 注释之前搜索可用的库?

比较不同结构数组中的两个元素?

cross-platform - cmake:安装可执行文件并创建指向它们的链接

javascript - getJSON在chrome上本地加载json数据文件时出错

c - C 中的自动变量未初始化,但在循环内给出固定值

c - 与循环迭代相比的内存分配效率

c - 使用 5 个信号量和进程打印数字 1 到 100

c - C 中的文件 IO 单元测试

swift3 - 如何解决 "Your app or its metadata still appears to contain misleading content."

c++ - CMake 生成没有 glob 的源文件列表