[英]C Programming. Printing current user
在C編程中,如何獲取當前用戶和當前工作目錄。 我正在嘗試打印這樣的東西:
asmith@mycomputer:~/Desktop/testProgram:$
(user) (computerName) (current directory)
我有以下代碼,但用戶名顯示為NULL。 我有什么想法我做錯了嗎?
void prompt()
{
printf("%s@shell:~%s$", getenv("LOGNAME"), getcwd(currentDirectory, 1024));
}
除了你應該使用環境變量USER
而不是LOGNAME
,你不應該首先使用環境變量。 您可以使用getuid(2)
獲取當前用戶ID,使用geteuid(2)
當前有效用戶ID,然后使用getpwuid(3)
從passwd文件中獲取用戶ID的用戶名:
struct passwd *p = getpwuid(getuid()); // Check for NULL!
printf("User name: %s\n", p->pw_name);
要獲取當前計算機名稱,請使用gethostname(2)
:
char hostname[HOST_NAME_MAX+1];
gethostname(hostname, sizeof(hostname)); // Check the return value!
printf("Host name: %s\n", hostname);
在類似unix的系統上,使用unistd.h中的getlogin函數。
這不是一個C問題,但更像是一個UNIX問題。 沒有可移植的方式來獲取C語言中的用戶名和當前工作目錄 。
但是,通過查看您的示例,我可以告訴您正在嘗試打印當前的UNIX用戶名和當前工作目錄。
如果在UNIX中需要當前工作目錄, 請檢查getcwd函數 。
如果您需要當前用戶名,可以在C程序中調用單獨的whoami進程,或者檢查getuid函數調用 。
這將是特定於平台的,因為C編程語言中沒有內在的方法來執行此操作。
看起來你是在基於Unix的系統上,所以你可能想要得到環境變量USER
,它通常是登錄名。
你也可以用
#include<stdlib.h>
main()
{
system("echo %username%"); /* This is for Windows
* instead use system("echo $USER"); for UNIX
*/
}
請注意,這僅適用於unix系統。
可能是LOGNAME未設置為您的環境變量,您可以使用printenv
命令查看環境變量
printf("%s@shell:%s$", getenv("USER"),getenv("PWD"))
這項工作也是如此。
但如上所述,你不應該依賴環境變量,而是使用標准的c函數。如果你真的想要使用它們,首先要確保它已經設置好了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.