Как записать конкретное смещение в пустой файл - PullRequest
2 голосов
/ 28 июля 2011

У меня есть файл, в котором я читаю данные.Предположим, что файл содержит строку «abcdefghij».Теперь я буду случайным образом читать из файла разные процессы, и они хранят этот байт и где-то смещаются.Например, я сохраняю 'c' как своего персонажа со смещением '3', потому что это его местоположение.Для справки, я использовал lseek, чтобы получить смещение в моих файлах.

Далее я хочу записать это в новый файл.Можно ли записать конкретное смещение в пустой файл?Итак, я хочу написать 'c' в позицию '3' в файле, а затем другой процесс запишет 'j' в файл в позиции 10.

Ответы [ 2 ]

2 голосов
/ 01 февраля 2012
#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);
}

Когда это работает, hexdump /tmp/x.txt равен

00 00 00 63 00 00 00 00  00 00 6a          | ...c.... ..j

fseek основан на lseek, который способен распознавать "дыры" в файлах (диапазоны нулей, которые еще не были записаны), но соответствующая файловая система должна поддерживать это.

Из справочной страницы мне не совсем ясно, что отверстия должны быть строго нулевыми, но на практике это так.

0 голосов
/ 06 ноября 2011

Посмотрите на ftello.Затем используйте fwrite.Вы также можете использовать lseek / write, если вы используете fd вместо FILE* s.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...