私は何時間も探していましたが、これを理解できないようです。現在のユーザーを C でマシンに出力する方法は知っていますが、C を使用してマシンに存在するすべてのユーザーを出力するにはどうすればよいですか (Linux マシンを実行しています)。:)
質問する
411 次
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 に答える