Зарезервировать место с помощью 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
Другие вопросы по тегам