2016-08-26 6 views
2

В linux, если у меня есть только имя пользователя, как получить идентификатор пользователя? Я использовал man getuid, но не могу найти никаких подсказок. EDIT1: Извините, я хочу получить идентификатор пользователя api. Мне не нравится разветвление другого процесса, например, вызов функции системы.Как получить идентификатор пользователя linux по имени пользователя?

ответ

3

Просто используйте команду ID

id username

[[email protected] ~]# id sylvain 
uid=1003(sylvain) gid=1005(sylvain) groups=1005(sylvain) 
1

Все имена перечислены в /etc/passwd, так что вы можете Grep и вырезать:

grep username /etc/passwd | cut -f3 -d':' 
4

Вы можете использовать getpwnam, чтобы получить указатель к структуре struct passwd, которая имеет член pw_uid. Пример программы:

#include <stdio.h> 
#include <stdlib.h> 
#include <errno.h> 
#include <sys/types.h> 
#include <pwd.h> 

int main(int argc, char *argv[]) 
{ 
    const char *name = "root"; 
    struct passwd *p; 
    if (argc > 1) { 
     name = argv[1]; 
    } 
    if ((p = getpwnam(name)) == NULL) { 
     perror(name); 
     return EXIT_FAILURE; 
    } 
    printf("%d\n", (int) p->pw_uid); 
    return EXIT_SUCCESS; 
} 

Если вы хотите Реентрантная функцию, смотрите в getpwnam_r.

Смежные вопросы