如何通过用户名获取linux用户ID?

时间:2016-08-26 03:00:01

标签: c linux

在linux中,如果我只有用户名,如何获取用户ID?我用man getuid,但找不到任何关于它的线索。 EDIT1: 对不起,我想通过api获取用户ID。我不喜欢分支另一个进程来调用系统函数。

3 个答案:

答案 0 :(得分:6)

您可以使用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

答案 1 :(得分:3)

只需使用id命令

即可

id username

[root@my01 ~]# id sylvain
uid=1003(sylvain) gid=1005(sylvain) groups=1005(sylvain)

答案 2 :(得分:1)

所有用户名都列在/etc/passwd中,因此您可以grep and cut:

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