2016-09-25 56 views
0

在Windows中,用戶帳戶具有帳戶名稱和與該帳戶關聯的「真實姓名」。這可以通過GetUserNameEx()檢索。類似地,在UNIX類型的操作系統中,存在「手指信息」(由chfn等設置,以及通過桌面上的各種GUI工具UNIXen)。 UNIX類型的操作系統(例如macOS和Linux)中的用戶進程如何檢索此信息?在UNIX類型的操作系統中獲取當前用戶帳戶的顯示名稱

理想的解決方案是使用libc API,而不依賴於產生finger進程等。

+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

在Unix類系統上,我可能會打電話getuid,然後getpwuidgetpwuid_r

喜歡的東西:

#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

不幸的是(或者在Ubuntu上,'pw_gecos'字段沒有在macOS上提供實名)。 – fluffy

+0

登錄需要使用可以找到的真實姓名創建,大概是這樣,但是上面的代碼在Mac OS X 10.11.6(El Capitan)中原樣使用,其中「cc」是「Apple LLVM 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

哦,有趣!我使用過'getpwent()'而不是'getpwuid(getuid())',這就是它失敗的原因。 getpwuid在兩臺機器上工作正常(macOS 10.12和Ubuntu 15.10)。謝謝! – fluffy

0

殼腳本解決方案:

在Linux中,可以在一個子過程使用getent passwd,然後解析出實名字段(它應該是逗號之間的五分之一)。

在macOS上,您可以使用id -f

相關問題