我有一个文件,我在其中读取了数据。假设文件有字符串“abcdefghij”。现在,我将在不同的进程中随机读取文件,并将该字节和偏移量存储在某处。例如,我将“c”保存为我的角色,偏移量为“3”,因为这是它的位置。作为引用,我一直在使用 lseek 来获取文件中的偏移量。
接下来,我想将其写入一个新文件。是否可以写入空文件中的特定偏移量?所以,我想将“c”写入文件中的位置“3”,然后另一个进程将“j”写入文件的位置 10。
最佳答案
#include <stdio.h>
int main ()
{
FILE * f = fopen ("/tmp/x.txt", "w");
fseek (f, 3, SEEK_SET);
fwrite ("c", 1, 1, f);
fseek (f, 10, SEEK_SET);
fwrite ("j", 1, 1, f);
fclose (f);
}
运行时,/tmp/x.txt 的 hexdump 是
00 00 00 63 00 00 00 00 00 00 6a | ...c.... ..j
fseek 基于 lseek,即 capable of recognising "holes"在文件中(尚未写入的零范围)但底层文件系统需要支持这一点。
从联机帮助页中我并不能清楚地看出空洞必须为零,但在实践中似乎确实如此。
关于c - 如何写入空文件中的特定偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6860671/