在Windows中,用戶帳戶具有帳戶名稱和與該帳戶關聯的「真實姓名」。這可以通過GetUserNameEx()
檢索。類似地,在UNIX類型的操作系統中,存在「手指信息」(由chfn
等設置,以及通過桌面上的各種GUI工具UNIXen)。 UNIX類型的操作系統(例如macOS和Linux)中的用戶進程如何檢索此信息?在UNIX類型的操作系統中獲取當前用戶帳戶的顯示名稱
理想的解決方案是使用libc API,而不依賴於產生finger
進程等。
在Windows中,用戶帳戶具有帳戶名稱和與該帳戶關聯的「真實姓名」。這可以通過GetUserNameEx()
檢索。類似地,在UNIX類型的操作系統中,存在「手指信息」(由chfn
等設置,以及通過桌面上的各種GUI工具UNIXen)。 UNIX類型的操作系統(例如macOS和Linux)中的用戶進程如何檢索此信息?在UNIX類型的操作系統中獲取當前用戶帳戶的顯示名稱
理想的解決方案是使用libc API,而不依賴於產生finger
進程等。
在Unix類系統上,我可能會打電話getuid
,然後getpwuid
或getpwuid_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;
}
不幸的是(或者在Ubuntu上,'pw_gecos'字段沒有在macOS上提供實名)。 – fluffy
登錄需要使用可以找到的真實姓名創建,大概是這樣,但是上面的代碼在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
哦,有趣!我使用過'getpwent()'而不是'getpwuid(getuid())',這就是它失敗的原因。 getpwuid在兩臺機器上工作正常(macOS 10.12和Ubuntu 15.10)。謝謝! – fluffy
殼腳本解決方案:
在Linux中,可以在一個子過程使用getent passwd
,然後解析出實名字段(它應該是逗號之間的五分之一)。
在macOS上,您可以使用id -f
。
這是否幫助? http://stackoverflow.com/questions/6619277/how-to-get-the-logged-in-users-real-name-in-unix – Sundeep
@Sundeep是的! 'getpwent'似乎是在正確的方向。謝謝。此外,這個問題應該被關閉爲重複:) – fluffy
嗯,至少在OSX上,'getpwent'實際上並沒有返回我需要的信息,但問題仍然是重複的。 :) – fluffy