簡體   English   中英

C編程。 打印當前用戶

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM