Linux, C++, переменная среды UID
Код:
int main()
{
cout << getenv("SHELL") << endl;
cout << getenv("HOME") << endl;
cout << getenv("UID") << endl;
cout << getenv("EUID") << endl;
return 0;
}
{
cout << getenv("SHELL") << endl;
cout << getenv("HOME") << endl;
cout << getenv("UID") << endl;
cout << getenv("EUID") << endl;
return 0;
}
Значения переменных SHELL и HOME функция выводит, а UID и EUID нет.
Но команда в консоли:
Код:
$ set | grep UID
показывает
Код:
EUID=1000
UID=1000
UID=1000
Таким же образом не хотят выводиться все переменные среды, имеющие числовое значение. Вопрос простой: как быть? Как получить значения этих переменных?
OS: Gentoo Linux.
Когда вы запускаете свое приложение не факт, что оболочка будет наследовать все свои переменные среды дочернему процессу, поэтому возможно, что у вас просто нет UID и EUID.
По поводу числовых - такого не может быть, все переменные трактуются как строки.
Цитата: grgdvo
set - внутренняя команда оболочки (bash, csh), она выводит переменные среды сессии пользователя.
Когда вы запускаете свое приложение не факт, что оболочка будет наследовать все свои переменные среды дочернему процессу, поэтому возможно, что у вас просто нет UID и EUID.
По поводу числовых - такого не может быть, все переменные трактуются как строки.
Когда вы запускаете свое приложение не факт, что оболочка будет наследовать все свои переменные среды дочернему процессу, поэтому возможно, что у вас просто нет UID и EUID.
По поводу числовых - такого не может быть, все переменные трактуются как строки.
Да, вы правы, спасибо. С числами было лишь совпадение. Я и сам понимал, что это абсурд, что getenv в любом случае вернет char*. Вот, что я сделал:
Код:
int main(int argc, char *argv[], char *env[])
{
while (*env) {
cout << *env++ << endl;
}
return 0;
}
{
while (*env) {
cout << *env++ << endl;
}
return 0;
}
и таким образом вывел список переменных среды, которые доступны программе. Жаль, сразу не догадался. Спасибо за ответ!