2016-09-25 4 views
0

Windowsでは、ユーザーアカウントにアカウント名とアカウントに関連付けられた「実名」の両方があります。これはGetUserNameEx()で検索できます。UNIXタイプのオペレーティングシステムで現在のユーザーアカウントの表示名を取得する

同様に、UNIXタイプのオペレーティングシステムでは、chfnなどで設定された「フィンガー情報」と、デスクトップUNIXenのさまざまなGUIツールがあります。この情報は、UNIX系OS(macOSやLinuxなど)のユーザプロセスでどのように取得できますか?

fingerプロセスなどを生成するだけではなく、理想的な解決方法はlibc APIを使用することです。

+2

は、このヘルプのでしょうか? http://stackoverflow.com/questions/6619277/how-to-get-the-logged-in-users-real-name-in-unix – Sundeep

+0

@Sundeepはい! 'getpwent'は正しい方向にあるようです。ありがとう。また、この質問は重複して閉じなければなりません:) – fluffy

+0

少なくともOSX上では、 'getpwent'は必要な情報を実際に返しませんが、問題はまだ重複しています。 :) – fluffy

答えて

1

私はおそらくgetuid、次にgetpwuidまたはgetpwuid_rをUnixライクなシステムで呼びます。

ような何か:

#include <pwd.h> 
#include <stdio.h> 
#include <unistd.h> 

int 
main(void) 
{ 
    struct passwd *pw; 

    pw = getpwuid(getuid()); 

    if (pw == 0) { 
     perror("getpwuid failed"); 
     return 1; 
    } 

    printf("username: %s; realname: '%s'\n", pw->pw_name, pw->pw_gecos); 

    return 0; 
} 
+0

'pw_gecos'フィールドは、残念なことに(あるいはUbuntu上でも)、macOS上で実名を提供しません。 – fluffy

+0

ログイン名は実際の名前で作成する必要がありますが、上記のコードはMac OS X 10.11.6(El Captitan)の "cc"が "Apple LLVM version 7.3"の場合と同じように動作しました。 0(clang-703.0.31) "、Ubuntu 16.04では" cc "が" cc(Ubuntu 5.4.0-6ubuntu1〜16.04.2)5.4.0 20160609 "でした。 MacとUbuntuでどのように動作させるようにしましたか? – sjnarv

+0

ああ、面白い! 'getpwuid(getuid()) 'ではなく' getpwent() 'を使用していたので、失敗していました。 'getpwuid'は両方のマシンでうまく動作しました(macOS 10.12、およびUbuntu 15.10)。ありがとう! – fluffy

0

シェル・スクリプト・ソリューション:

Linuxでは、あなたは、サブプロセスでgetent passwdを使用して、(カンマの間に第五1でなければなりません)本名フィールドを解析することができます。

macOSでは、id -fを使用できます。

関連する問題