C Программирование. Печать текущего пользователя - PullRequest
4 голосов
/ 20 сентября 2009

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

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

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

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

Ответы [ 6 ]

17 голосов
/ 20 сентября 2009

Помимо того, что вы должны использовать переменную окружения USER вместо LOGNAME, вы не должны использовать переменные среды для этого в первую очередь.Вы можете получить текущий идентификатор пользователя с помощью 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);
4 голосов
/ 20 сентября 2009

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

2 голосов
/ 20 сентября 2009

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

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

Если вам нужен текущий рабочий каталог в UNIX , проверьте getcwd function .

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

1 голос
/ 20 сентября 2009

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

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

0 голосов
/ 11 апреля 2015

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

#include<stdlib.h>
main()
{
    system("echo %username%");    /* This is for Windows
                                   * instead use system("echo $USER"); for UNIX
                                   */
}
0 голосов
/ 20 сентября 2009

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

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

Также выполняет работу.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...