2013-02-20 63 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; 
} 
相關問題