У меня есть задание, в котором я должен симулировать команду ls -l unix с помощью C. Я выяснил все, кроме поиска владельца и группы определенного файла. У меня есть uid и gid из структуры stat, используя системный вызов stat(), но я не могу сопоставить их с фактическим именем пользователя и владельца соответственно. Я должен использовать только те системные вызовы, которые перечислены в man 2 страницах. Я попытался найти ответ, но везде он говорит использовать вызов getpwnam(), который я не могу, поскольку он не указан в man 2 страницах.Как найти владельца и имя группы из uid и gid с помощью системных вызовов, перечисленных в man 2 страницы?
ответ
Да, getpwnam (3) и getgrnam (3) являются способами вы бы сделать это в настройках не ограничивается только системных вызовов.
Но даже чтение содержимого /etc/passwd
с использованием только системных вызовов представляет собой вызов или два. Обычные друзья, как FOPEN (3), Fread (3) и fgets (3) не доступны, и не являются струнные хелперы как strsep (3). Я думаю, вы застряли в читаете (2). Вы можете прочитать один символ за раз, используя , прочитайте (2) и выполните грубый разбор содержимого таким образом.
Или вы можете настроить массив символов, который достаточно велик, чтобы читать все /etc/passwd
в память и просматривать содержимое файла таким образом. У вас будет информация stat (2) вернулась, чтобы сообщить, насколько велика /etc/passwd
, так что это может быть неудачно, если оно слишком велико для ваших предположений или реализовать стратегию буферизации самостоятельно.
Или вы можете посмотреть в sbrk (2), и убедитесь, что у Вас есть достаточно памяти, чтобы посадить все /etc/passwd
в памяти от одного чтения (2).
Однако вы читаете содержимое, у вас будет некоторое преобразование текста - строки цифр - в C числовые типы, сложнее, если atoi (3) недоступен.
Также весело: преобразование time_t
(время (2) выход, и некоторые из полей struct stat
) до хорошей строки:
1409264099 -> Thu Aug 28 17:14:59 2014
Являются ли эти действительно правила задания .. .? C является достаточно сырым без присутствия обычного libc
...
Вы можете найти файл /etc/passwd
за то, что вам нужно. Вы можете узнать структуру файла /etc/passwd
с помощью man 5 passwd
. Нет системного вызова, который сделает это за вас.
Только системные вызовы ... о, дорогая!
Ну, я бы mmap /etc/passwd
и /etc/group
и поиск областей памяти с использованием основных операций С. Оба файла ориентированы по прямой, поэтому строки разделяются \n
, и в каждой строке записи разделяются двоеточиями.
- 1. GSUtil Rsync не сохраняя UID/GID владельца
- 2. linux | синхронизировать uid и gid
- 3. Как изменить имя владельца и имя группы с помощью php?
- 4. Как получить UID и GID в jnrfuse
- 5. Pone 4.3 uid и gid не найдены
- 6. Изменение владельца и группы в c
- 7. Perl: получить имя пользователя и имя группы из stat commad
- 8. Как переназначить uid/gid в tar-архиве?
- 9. Как установить gid и uid в os.FileMode в golang?
- 10. Программно получать UID и GID от имени пользователя в Unix?
- 11. context_switch и виртуализация системных вызовов
- 12. Что такое GID/UID системы на Android?
- 13. Получите gid, если вы знаете имя группы в Go
- 14. Использование системных вызовов для чтения и записи с помощью sprintf
- 15. API для перевода имени группы в идентификатор группы (gid)
- 16. системных вызовов в сигналы C и вилкой
- 17. Как найти места системных вызовов моей программы?
- 18. как получить документ в системных вызовов SystemTap
- 19. Поиск имени группы из Ldap GID
- 20. Отсутствующие страницы руководства в Cygwin для системных вызовов
- 21. C - распечатать файл с помощью системных вызовов?
- 22. Устранение дорогостоящих обратных системных вызовов и SEO
- 23. Общие способы вызова системных вызовов из оболочки
- 24. Переадресация прерываний и системных вызовов в Linux
- 25. Как правильно отобразить идентификатор группы (GID) в C?
- 26. Как man.cgi справляется с страницами man-man cat и mdoc?
- 27. Как прочитать список gid, ассоциированный с uid в пространстве ядра?
- 28. Использование системных вызовов read() и write()
- 29. экстракт UID из/и т.д./пароль с помощью регулярных выражений
- 30. Обработка системных вызовов с помощью ASM кода
'getpguid (uid_t uid)' и 'getgrgid (gid_t gid)' (они находятся на той же странице man, что и те, которые основаны на имени). Оба возвращают ponter в (статическую) структуру. – wildplasser