Зарезервировать место с помощью fseek safe?
Если вы можете гарантировать, что после поиска будут записаны данные, безопасно ли их использовать? 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, но как насчет других платформ? Есть ли какие-нибудь ошибки, на которые стоит обратить внимание?
1 ответ
Решение
Да, это отлично работает. Пока вы открыли файл в w
или же w+
режим, а не a
или же a+
Вы можете искать в любой точке файла и записывать туда, и он будет записывать в эту точку файла. Другие части файла останутся без изменений; если они никогда не были написаны, они будут содержать ноль байтов.
Так что, если вы делаете следующее для файла, который был только что открыт в w
режим (который сначала усекает файл):
fseek(f, 10, SEEK_SET);
fwrite("abc", 1, 3, f);
rewind(f);
fwrite("1234567890", 1, 10, f);
содержимое файла будет:
1234567890abc