C Программирование. Печать текущего пользователя

В программировании на языке C как вы получаете текущего пользователя и текущий рабочий каталог. Я пытаюсь напечатать что-то вроде этого:

  [email protected]:~/Desktop/testProgram:$
  (user) (computerName) (current directory)

У меня есть следующий код, но имя пользователя отображается как NULL. Любые идеи, что я делаю неправильно?

void prompt()
{
        printf("%[email protected]:~%s$", getenv("LOGNAME"), getcwd(currentDirectory, 1024));                 
}

Ответ 1

Обратите внимание, что это будет работать только в системе unix.
может быть LOGNAME не задано как ваша переменная среды вы можете увидеть переменные среды, используя команду printenv

printf("%[email protected]:%s$", getenv("USER"),getenv("PWD"))

Также выполняет задание.

но, как уже упоминалось, вы не должны полагаться на переменные среды, скорее используйте стандартные функции c. Если вы действительно хотите их использовать, сначала убедитесь, что он установлен.

Ответ 2

Помимо того, что вместо LOGNAME вы должны использовать переменную окружения USER, вы не должны использовать для этого переменные окружения. Вы можете получить текущий идентификатор пользователя getuid(2) и текущий эффективный идентификатор пользователя с geteuid(2), а затем используйте getpwuid(3), чтобы получить имя пользователя из идентификатора пользователя из файла passwd:

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);

Ответ 3

В unix-подобных системах используйте функцию getlogin из unistd.h.

Ответ 4

Это не вопрос C, а скорее вопрос UNIX. Нет портативного способа получения имени пользователя и текущего рабочего каталога на языке C.

Однако, просмотрев ваш пример, я могу сказать, что вы пытаетесь распечатать текущее имя пользователя UNIX и текущий рабочий каталог.

Если вам нужна текущая рабочая директория в UNIX проверить функцию getcwd.

Если вам нужно текущее имя пользователя, вы можете вызвать отдельный whoami процесс в вашей программе C или проверить вызов функции getuid.

Ответ 5

Это будет специфичным для платформы, поскольку для этого не существует встроенного способа программирования на языке программирования C.

Похоже, вы работаете в системе на базе Unix, поэтому вам, вероятно, захочется получить переменную окружения USER, которая обычно является именем входа.

Ответ 6

вы также можете использовать

#include<stdlib.h>
main()
{
    system("echo %username%");    /* This is for Windows
                                   * instead use system("echo $USER"); for UNIX
                                   */
}