1

uidと名前の配列を取得するにはどうすればよいですか?

0から99999まで繰り返して、を実行できgetpwnam()ます。ただし、ほとんどのマシンのアカウントは5つ未満であるため、最適ではありません。どのフレームワークがこれに関与しているのかわからないため、何を検索すればよいかわかりません。

アカウントをトラバースできるより最適なソリューションはありますか?

編集:投稿した直後にgetpwent()、アカウントをトラバースするために発見しました。

setpwent();
struct passwd *pw;
while ((pw = getpwent())) printf("%d\n", pw->pw_uid);
endpwent();

ただし、それはアカウントがシステム環境設定アカウントであるかどうかを示すものではありません。

それでも、システム環境設定のアカウントを取得するにはどうすればよいでしょうか。


編集:私はこれに相当するコマンドライン、コマンドを見つけましたdscl

prompt> dscl . -list /Users UniqueID
_mysql                  74
_postfix                27
_spotlight              89
_sshd                   75
_windowserver           88
_www                    70
daemon                  1
johndoe                 501
nobody                  -2
root                    0
4

1 に答える 1

1

getgrnam("staff")スタッフグループのグループレコードを取得するために使用します。メンバーはgr_mem、マンページでは詳細に説明されていませんが、NULLポインターで終了するユーザー名の配列のように見えます。

管理者であるユーザーを見つけるには、adminグループで同じことを行います。

于 2010-06-06T06:42:57.237 に答える