Как вы уже видели, архив начинается с "!"(сопровождается новой строкой).
После этого у вас есть примерно такая структура:
#pragma pack(1) // use whatever your compiler wants to ensure against padding.
struct file_header {
char filename[16];
char timestamp[11];
char ownerID[5];
char groupID[5];
char filemode[8];
char filesize[9];
char magic[2];
};
Для каждого файла в архиве есть одно, так что если вы хотитечтобы сбросить только имена файлов, вы можете (по крайней мере, в теории - продолжить чтение) пропустить заголовок, затем прочитать их и отобразить имена файлов.
Хотя есть одна проблема: как вы можете видеть, этопозволяет только 16 байтов для каждого имени файла, что часто недостаточно.Есть разные способы справиться с этим, и (к сожалению) они варьируются от одной реализации ar
к другой, поэтому почти невозможно сказать вам, как получить настоящие имена файлов.
Вероятно, наиболееочевидным решением было бы использовать popen
для запуска ar
(и надеяться, что он соответствует формату архивных файлов, на которые вы должны смотреть).