2

getutxent()Apple の で定義されている関数を使用して、現在ログインしているユーザーのリストを取得しようとしています<utmpx.h>。私が使用しているテストコードは次のとおりです。

#include <stdio.h>
#include <utmpx.h>

int main(void) {
    setutxent();
    while (1) {
        struct utmpx *user_info = getutxent();
        if (user_info == NULL) break;
        printf("%s\n", user_info->ut_user);
    }
    return 0;
}

ログインしているユーザーが 1 人だけでテストしています。私が得る出力はこれです:

myusername
myusername

ユーザー名が 2 回表示されるのはなぜですか? 複数のユーザーがいる場合、それは起こりますか?

私のMacに関する詳細: ここに画像の説明を入力

4

1 に答える 1

4

getutxent()ユーザーを報告するのではなく、セッションを報告します。

複数のセッションを開いている場合 (端末セッションなど)、ユーザー アカウンティング データベースに記録され、盲目的に取得されます。これは、構造体の要素ut_idud_line要素をチェックすることで確認できます。それらは別々のプロセス(およびそれを使用している場合は端末)に存在するため、同じであるutmpxインスタンスごとに異なる必要があります。ut_user

于 2014-09-03T21:42:03.980 に答える