1

我一直在寻找几个小时,似乎无法弄清楚这一点。我知道如何打印将当前用户放在 C 中的机器上,但是如何使用 C 打印出机器上存在的所有用户。(我正在运行 linux 机器)感谢您的帮助!:)

4

4 回答 4

2

机器的用户列在 /etc/passwd 中。过滤所有“人类”用户的好方法是

cat /etc/passwd | grep "/home" |cut -d: -f1

因为人类用户通常有一个主目录。

现在,要在 C 中调用它,您可以使用 popen。看一眼

man popen
于 2013-02-20T01:59:13.240 回答
2
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <pwd.h>

int main(int argc, char ** argv)
{
    // You can restrict the range of UIDs 
    //   depending on whether you care about system users or real users
    int minUID = 0;
    int maxUID = 10000;
    for (int i = minUID; i < maxUID; ++i)
    {
        struct passwd * p = getpwuid(i);
        if (p != NULL)
            printf("%d : %s\n", i, p->pw_name);
    }
}
于 2013-02-20T02:00:51.670 回答
2

在 UNIX 机器上,使用pwent一系列函数:

#include <sys/types.h>
#include <pwd.h>

int main() {
    struct passwd *p;
    while((p = getpwent())) {
        printf("name: %s\n", p->pw_name);
    }
}

这将查阅系统的权威用户数据库,不一定是/etc/passwd.

于 2013-02-20T02:03:57.927 回答
0

在 BSD 上测试。

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

int main(int argc, char** argv) {
struct passwd *pwd;

while((pwd = getpwent())!=NULL) {
printf("%s\n",pwd->pw_name);

}
return 0;
}
于 2013-02-20T02:06:47.327 回答