Я пишу массовый редактор тегов ID3 на C. Теги ID3 обычно находятся в начале файла в кодировке mp3, хотя старые теги (версия 1) находятся в конце. Приложение предназначено для приема каталога и списка идентификаторов фреймов из командной строки, а затем повторяет структуру каталогов, обновляя все найденные теги ID3. Пользователь может дополнительно удалить все старые теги (версия 1). Другой вариант - просто отобразить текущие теги без обновления. Каталог может содержать 2 файла или 2 миллиона. Если пользователь хочет обновить файлы, я планировал загрузить весь файл в память, выполнить обновления, а затем сохранить его (файл также можно переименовать). Однако, если пользователь хочет печатать только текущие теги ID3, загрузка всего файла кажется чрезмерной. Ведь файл может быть 200мб.
Я прочитал эту ветку, которая была проницательной - mmap() против чтения блоков
Поэтому мой вопрос: какой самый эффективный способ сделать это - read(), mmap() или какая-то комбинация? Идеи дизайна приветствуются.
Редактировать: Насколько я понимаю, mmap по существу делегирует загрузку файла в память подсистеме виртуальной памяти. Мне кажется, что VMM был бы высоко оптимизирован на большинстве систем, так как он критичен для производительности системы.