C编程.打印当前用户

use*_*514 4 c environment-variables

在C编程中,如何获取当前用户和当前工作目录.我正在尝试打印这样的东西:

  asmith@mycomputer:~/Desktop/testProgram:$
  (user) (computerName) (current directory)
Run Code Online (Sandbox Code Playgroud)

我有以下代码,但用户名显示为NULL.我有什么想法我做错了吗?

void prompt()
{
        printf("%s@shell:~%s$", getenv("LOGNAME"), getcwd(currentDirectory, 1024));                 
}
Run Code Online (Sandbox Code Playgroud)

Ada*_*eld 18

除了这个事实,你应该使用环境变量USER,而不是LOGNAME,你不应该摆在首位使用环境变量这一点.您可以使用当前用户ID getuid(2)和当前有效用户ID 获取geteuid(2),然后使用getpwuid(3)从passwd文件中的用户ID获取用户名:

struct passwd *p = getpwuid(getuid());  // Check for NULL!
printf("User name: %s\n", p->pw_name);
Run Code Online (Sandbox Code Playgroud)

要获取当前计算机名称,请使用gethostname(2):

char hostname[HOST_NAME_MAX+1];
gethostname(hostname, sizeof(hostname));  // Check the return value!
printf("Host name: %s\n", hostname);
Run Code Online (Sandbox Code Playgroud)


sep*_*p2k 5

在类unix的系统上,请使用unistd.h中的getlogin函数。


sud*_*03r -2

请注意,这仅适用于 UNIX 系统。
可能是 LOGNAME 没有设置为您的环境变量,您可以使用printenv命令 查看环境变量

printf("%s@shell:%s$", getenv("USER"),getenv("PWD"))
Run Code Online (Sandbox Code Playgroud)

也做这项工作。

但正如前面提到的,你不应该依赖环境变量,而应该使用标准的 c 函数。如果你真的想使用它们,首先确保它已设置。

  • 如果您在许多情况下通常从环境中获取用户(例如根据该信息写入 /etc/shadow ),则存在巨大的安全缺陷。有人可以设置 USER=root (4认同)