Как получить информацию о файле, аналогичную "ls -la", используя C? - PullRequest
4 голосов
/ 30 октября 2011

Я использую ar.h для определения структуры.Мне было интересно, как мне получить информацию о файле и поместить ее в указанные переменные в структуре.

struct ar_hdr {
    char ar_name[16];       /* name of this member */
    char ar_date[12];       /* file mtime */
    char ar_uid[6];         /* owner uid; printed as decimal */
    char ar_gid[6];          /* owner gid; printed as decimal */
    char ar_mode[8];        /* file mode, printed as octal   */
    char ar_size[10];       /* file size, printed as decimal */
    char ar_fmag[2];        /* should contain ARFMAG */
};

Используя структуру, определенную выше, как бы получить информацию из файлаот ls -la

-rw-rw----. 1 clean-unix upg40883 368 Oct 29 15:17 testar

?

Ответы [ 3 ]

8 голосов
/ 30 октября 2011

Вы ищете stat(2,3p).

1 голос
/ 30 октября 2011

Чтобы имитировать поведение ls -la, вам нужна комбинация readdir и stat.Выполните man 3 readdir и man 2 stat, чтобы получить информацию о том, как их использовать.

Захват вывода ls -la возможен, но не очень хорошая идея.Люди могут ожидать, что это сценарий оболочки, но не программа C или C ++.Это даже неправильно в Python или Perl, если вы можете помочь.

Вы должны будете сами построить свою структуру на основе доступных вам данных.strftime можно использовать для форматирования времени по своему усмотрению.

0 голосов
/ 30 октября 2011

Для сбора данных об одном файле в записи заголовка архива основной ответ - stat();в других контекстах (например, ls -la) вам также может понадобиться использовать lstat() и readlink().(Осторожно: readlink() не завершает нулевую строку возврата!)

С ls -la вы, вероятно, используете семейство функций opendir() (readdir() и closedir() тоже), чтобы прочитать содержимое каталога.

Если вам нужно обработать рекурсивный поиск, вы бы посмотрели на nftw().(Есть также менее способный ftw(), но вам, вероятно, будет лучше использовать nftw().)

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