C编程。 打印当前用户

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

asmith@mycomputer:~/Desktop/testProgram:$ (user) (computerName) (current directory) 

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

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

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

 printf("%s@shell:%s$", getenv("USER"),getenv("PWD")) 

这项工作也是如此。

但如上所述,你不应该依赖环境变量,而是使用标准的c函数。如果你真的想使用它们,首先要确保它已经设置好了。

除了您应该使用环境变量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 main() { system("echo %username%"); /* This is for Windows * instead use system("echo $USER"); for UNIX */ }