2012-01-08 3 views
0

Мне нужно выполнить операции над двоичным файлом, например, отредактировать количество байтов в начале файла или выполнить операции записи, перескакивающие через «X раз sizeof (int)». Мне не нужны фактические фрагменты кода, какие функции я должен использовать, и если это возможно. Это работа для fseek? Важно, чтобы я не загружал данные из файла в моей памяти.Операции в двоичном файле C

ответ

2

Да, это работа для fseek().

Запись в середине файла будет перезаписывать существующие данные. Вам нужно переместить все последующие данные на сумму, которую вы собираетесь добавить.

+0

И если я задаю определенное смещение в середине, он просто перезаписывается? – andrei

+0

@andrei yes - если вы хотите изменить содержимое файла, вам лучше создать новый файл, в который вы пишете то, что необходимо, и переименовать (атомарно) в конце. Это общий процесс, но он полна ловушек: google об этом, чтобы найти правильное решение. – fge

1

Вы можете использовать fseek(), но также можете посмотреть mmap(). Преимущество последнего заключается в том, что вам не нужно заботиться о текущем указателе в файле, это просто область памяти, в которую вы можете перейти к использованию смещений.

Проблема: mmap() для Windows. И если вы хотите вставить данных, это не лучший выбор.

+0

Меня интересует производительность, которую я должен выбрать? – andrei

+0

Нет проблем, это приложение linux, если оно более эффективно, я буду использовать его – andrei

+0

Ну, 'mmap()' имеет то преимущество, что вы не выдаете системные вызовы для чтения/записи. НО, если вы хотите вставить данные, это не очень подходит, как справедливо упоминает @AdamZalcman. – fge