c - 如何写入空文件中的特定偏移量

标签 c linux file

我有一个文件,我在其中读取了数据。假设文件有字符串“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/

相关文章:

file - 更改 Racket 中文件的所有权

c - 彼得森算法 - 抢占式还是非抢占式?

linux - 如何从源代码升级 CentOS 6.5/Linux/Unix 中的 OpenSSL?

c - 如何使用 lxdialog 创建 GUI(例如 menuconfig)

c++文件命名(编号)与文件I/O

java - 为什么我可以从 getClass().getResource() 获取有效的 url,但返回的 url 创建了一个不存在的文件

c - 访问结构中指针(变量)结构的成员

c - 将 fgetc() 的结果可移植地分配给 C 中的 char 的最佳方法

有力量的食人者和传教士

linux - 信号线程问题