Список идентификаторов пользователей / системных настроек> Аккаунты
Как я могу получить массив с UID и именами?
Я мог бы перебрать от 0 до 99999 и сделать getpwnam()
, Однако большинство машин имеют менее 5 учетных записей, поэтому это не оптимально. Я не знаю, какая структура ответственна за это, и поэтому я понятия не имею, что искать.
Есть ли более оптимальное решение, которое может пересечь счета?
Изменить: сразу после того, как я опубликовал, я обнаружил getpwent()
для прохождения счетов.
setpwent();
struct passwd *pw;
while ((pw = getpwent())) printf("%d\n", pw->pw_uid);
endpwent();
Однако это не означает, является ли учетная запись системной учетной записью или нет.
Так как же получить учетные записи системных настроек?
Изменить: я нашел командную строку эквивалент этого, dscl
команда.
prompt> dscl . -list /Users UniqueID
_mysql 74
_postfix 27
_spotlight 89
_sshd 75
_windowserver 88
_www 70
daemon 1
johndoe 501
nobody -2
root 0
1 ответ
Использование getgrnam("staff")
получить групповую запись для группы сотрудников. gr_mem
Элемент member, хотя и не объясняется подробно на man-странице, представляется массивом имен пользователей, оканчивающихся указателем NULL.
Чтобы определить, какие пользователи являются администраторами, проделайте то же самое с группой администраторов.