1

Linux Suse10マシンにログインし、C ++プログラムを介してgetlogin_r()を確認すると、ログイン名として適切な結果が得られます。

int main()
{
    char szUserName[64] = {0};

    int nGet = getlogin_r(szUserName, sizeof(szUserName)-1);
    if(0 != nGet)
        {
            printerr();
        }
    printf("%s\n", szUserName);
    char * szHome = getlogin();
    printf("%s\n", szHome);
    return 0;
}

しかし、su --name2を使用した後、ログインを変更しました。ただし、getlogin_r()は引き続き古いusenameを表示します。

1つの解決策は、geteuid()を使用することです。しかし、上記の問題の理由は何ですか

4

1 に答える 1

6

「使用後su - name2、ログインを変更しました」-いいえ、変更していません。ログインではなく、ユーザーIDを変更しました。

のマニュアルページにsuは、-オプションについて次のように記載されています。「ユーザーが直接ログインした場合にユーザーが期待するのと同様の環境を提供します。」どうやら「類似」は「同一」とは異なります。具体的にsu -は、ログインレコードを/ var / run/utmpに保存しません。

于 2012-04-06T13:43:18.720 に答える