Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Доступ к переменным окружения  (Прочитано 20328 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« : 15-01-2007 09:20 » 

Подскажите, как получить переменные среды окружения ОС, такие как PATH, TMP и т.д..
Не выходя за рамки стандарта ANSI/ISO C/C++.
Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #1 : 15-01-2007 09:36 » 

int main()
{
    cout<<getenv("PATH"); 
}

Header File: stdlib.h (C) or cstdlib (C++)
Записан

Удачного всем кодинга! -=x[PooH]x=-
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 15-01-2007 10:01 » 

Да, точно она.  Здесь была моя ладья...
И кстати я ее просматривал, но почему то не придал ей значения.  Быть такого не может
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 15-01-2007 10:33 » 

Еще можно воспользоваться соотв. формой main():

Код: (C)
int main(int argc, char ** argv, char ** env);
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 15-01-2007 12:25 » 

Еще можно воспользоваться соотв. формой main():

Код: (C)
int main(int argc, char ** argv, char ** env);
Кстати, такой main первый раз вижу.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 15-01-2007 13:17 » 

Цитата: Serg79
Кстати, такой main первый раз вижу.
Тем не менее. Если не ошибаюсь, конец списка строк env по
Код: (C)
i = 0;
while(env[i] != NULL)
{
   ...
   i++;
}
« Последнее редактирование: 15-01-2007 13:19 от dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 18-01-2007 06:10 » 

Порылся в 'man'-ах и нащел еще вот это:
перечислить все переменные окружения
Код:
#include <stdio.h>

extern char **environ;

int main(int argc, char **argv)
{
  int i;

  if( environ != NULL )
    for( i=0; environ[i]; i++ )
      printf("%s\n",environ[i]);

  return 0;
}
Там так же сказано, что вместо:
Код:
int main(int argc, char ** argv, char ** env);
лучше использовать в новых проектах:
Код:
extern char **environ;
т.к. указатель на массив указателей 'environ' описан в стандарте POSIX и он поддерживается всеми OC поддерживающими стандарт POSIX. А вариант 'main' ни в каком из стандартов не отражон, но поддерживается всеми POSIX системами в связи с историческими традициями.
« Последнее редактирование: 16-12-2007 13:43 от Алексей1153++ » Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 18-01-2007 13:03 » new

Еще можно воспользоваться соотв. формой main():

Код: (C)
int main(int argc, char ** argv, char ** env);
Кстати, такой main первый раз вижу.

Такой main был (и есть) во многих юниксах.  Я видел такое объявление main в одной из ранних редакций POSIX, но сейчас не могу найти ту книгу.
Сейчас стандарт Си явно определяет main либо как функцию без аргументов: int main(void);
либо как функцию с двумя аргументами: int main(int argc, char *argv[]);

Последняя редакция POSIX следует стандарту ISO C.  Дополнительно POSIX определяет в <unistd.h> переменную
extern char **environ;
в которой хранятся строки с присваиваниями переменных среды, но приложениям рекомендуется использовать getenv и putenv и не обращаться к environ напрямую. 

MS Visual Studio определяет в <stdlib.h> переменную extern char **_environ;
« Последнее редактирование: 18-01-2007 13:15 от npak » Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines