печать только имени файла, а не разрешения и даты - PullRequest
2 голосов
/ 31 октября 2011

Я читаю в архивном файле из Unix, и я хочу прочитать файлы и распечатать, какие файлы находятся внутри архива и только имя файла. Для примера мне нужно hello.c, а не hello.c 123124123 001004002 1000 0.

вот то у меня щас

input_fd = open(archive_name, O_RDONLY);


while( (read(input_fd, buf, BUF_SIZE)) > 0) {
    printf("%s\n", buf);
}
close(input_fd);

Ответы [ 2 ]

2 голосов
/ 31 октября 2011

То, что вы делаете, мне кажется странным, но если у вас есть C-строка (вы печатаете buf в коде, и она дает разумный вывод), вы можете попробовать завершить ее NUL:

char *p;

if ((p = strchr(buf, ' '))
    *p = 0;
printf("%s\n", buf);
0 голосов
/ 31 октября 2011

Насколько переносимым должен быть ваш код? Безусловно, самый простой способ добиться эффекта - использовать саму команду ar. Чтобы получить желаемый результат:

ar t archive

Существовало много форматов архивов, и все еще существует несколько вариантов общего пользования (в частности, AIX довольно сильно отличается от «остальных»). Существуют разные способы обработки длинных имен файлов. Чтобы точно прочитать архив, вам нужно будет прочитать заголовок, возможно, список строк, пропустить псевдофайл, связанный с определенными символами библиотеки, а затем обработать каждый заголовок файла и пропустить сам файл, повторяя до конца архива. Когда вы прочитаете заголовок, вам нужно будет разделить его соответствующим образом, чтобы выделить только имя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...