2013-02-20 29 views
0

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

+1

您可以尝试从'/ etc/passwd'中读取并在第一个':'字符前打印令牌。但是这也会给你系统用户,并且不会为ldap用户工作。 – szmoore 2013-02-20 01:52:04

回答

1

在UNIX机器上,使用​​一系列功能:

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

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

这会咨询系统的权威性的用户数据库,这未必是/etc/passwd

+0

这个作品!谢谢! – 2013-02-20 02:21:45

2

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

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

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

现在,为了在C中调用它,你可以使用popen。看看

man popen 
+1

如果有一个API可以做到的话,应该避免使用'popen'。在这种情况下,'getpwent/getpwuid'更容易使用。 – nneonneo 2013-02-20 02:01:58

+0

我不知道这些命令。 Thx nneonneo – Cristopher 2013-02-20 03:06:12

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

int main(int argc, char ** argv) 
{ 
    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); 
    } 
} 
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; 
} 
相关问题