Работа в обратном направлении от выхода, поле за полем:
-rw-r--r-- 1 kaz kaz 3573 2018-06-07 13:59 .bashrc
Имя .bashrc
происходит из readdir
обхода.
Все, кроме имени, происходит от lstat
системный вызов, вызванный для имени.
Тип -rw...
и флаги представляются из st_mode
, который необходимо декодировать в эту форму. Существуют макросы доступа, которые могут помочь, например S_ISDIR(mode)
, для проверки, является ли это каталогом, или (mode & S_IXUSR) != 0
, чтобы проверить, является ли он исполняемым владельцем. 1
- это количество ссылок, st_nlink
. kaz
и kaz
- это идентификаторы пользователей и групп, преобразованные в текст с использованием (например) getpwuid
для получения struct passwd *
и getgrgid
для получения struct group *
с полями имен. 3753
- это st_size
. Вывод даты можно получить путем форматирования st_mtime
с использованием функции strftime
.
Форматирование в столбцы с отступами можно выполнить с помощью printf
или sprintf
, например: printf("<%-50s>", "this-is-left-aligned-in-50-col-field")
.