Мне нужно выполнить операции над двоичным файлом, например, отредактировать количество байтов в начале файла или выполнить операции записи, перескакивающие через «X раз sizeof (int)». Мне не нужны фактические фрагменты кода, какие функции я должен использовать, и если это возможно. Это работа для fseek? Важно, чтобы я не загружал данные из файла в моей памяти.Операции в двоичном файле C
ответ
Да, это работа для fseek()
.
Запись в середине файла будет перезаписывать существующие данные. Вам нужно переместить все последующие данные на сумму, которую вы собираетесь добавить.
Вы можете использовать fseek()
, но также можете посмотреть mmap()
. Преимущество последнего заключается в том, что вам не нужно заботиться о текущем указателе в файле, это просто область памяти, в которую вы можете перейти к использованию смещений.
Проблема: mmap()
для Windows. И если вы хотите вставить данных, это не лучший выбор.
Меня интересует производительность, которую я должен выбрать? – andrei
Нет проблем, это приложение linux, если оно более эффективно, я буду использовать его – andrei
Ну, 'mmap()' имеет то преимущество, что вы не выдаете системные вызовы для чтения/записи. НО, если вы хотите вставить данные, это не очень подходит, как справедливо упоминает @AdamZalcman. – fge
И если я задаю определенное смещение в середине, он просто перезаписывается? – andrei
@andrei yes - если вы хотите изменить содержимое файла, вам лучше создать новый файл, в который вы пишете то, что необходимо, и переименовать (атомарно) в конце. Это общий процесс, но он полна ловушек: google об этом, чтобы найти правильное решение. – fge