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 に答える