1 / 1 / 0
Регистрация: 08.10.2010
Сообщений: 36

Получить значения переменных среды, не используя getenv

03.11.2010, 17:13. Показов 3375. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Мне нужно получить значения переменных среды,не используя getenv. Я написал код и вроде все получается. Только получается,что я могу использовать и environ(предварительно написав extern **char environ) и __environ( описание ее есть в unistd.h) - выводит список переменных среды. Скажите,пожалуйста, какую из этих двух переменных следует использовать и в чем разница?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.11.2010, 17:13
Ответы с готовыми решениями:

Поменять местами значения целых переменных х и у не используя дополнительных переменных
Знаю, что это очень простая задача, но никак не могу сделать, пожалуйста помогите!!! Поменять местами значения целых переменных х и у не...

Создать на основе одного текстового файла другой, меняя в тексте имена переменных среды на их значения
Почему-то подумал что батником будет удобнее, особенно если соберусь на юниксы или мак переносить всё. С батниками имел дело на слабом...

используя отладчик, проанализировать значения переменных
Три программы, приведенные ниже, исполнить в среде и, используя отладчик, проанализировать значения переменных. Программы и результаты...

18
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
03.11.2010, 21:00
http://refspecs.freestandards.... viron.html
0
1 / 1 / 0
Регистрация: 08.10.2010
Сообщений: 36
03.11.2010, 21:05  [ТС]
я уже видел эту ссылку. __environ - это не "псевдоним" environ. Я отвечал преподавателю,что это одно и то же,но он сказал,что это не так.
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
03.11.2010, 21:25
Ну тогда спроси у него что же это
0
 Аватар для romex
45 / 45 / 9
Регистрация: 11.04.2010
Сообщений: 223
04.11.2010, 22:33
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<stdio.h>
extern char** environ;
extern char** _environ;
 
int main(){
    int i=0,j;
    while(environ[i]!=NULL){
        j=0;
        printf(" environ:");
        while(environ[i][j]!='\0'){
            printf("%c",environ[i][j]);
            j++;
        }
        printf("\n_environ:");
        j=0;
        while(_environ[i][j]!='\0'){
            printf("%c",_environ[i][j]);
            j++;
        }
        printf("\n");
        i++;
    }
    return 0;
}
В общем выдают чуть более чем полностью одинаковые результаты. Так что думаю, что нужно тестить изменяя значения переменных и смотря что будет с обоими массивами и самими переменными. Думаю речь идет о каком-то финте ушами, причем о таком, который даже в мануале не описан. Если выясните, пишите. Интересно ведь! Хотя я склоняюсь к мнению, что разницы нет.
1
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
05.11.2010, 06:53
unistd.h
Code
1
2
3
4
5
/* NULL-terminated array of "NAME=VALUE" environment variables.  */
extern char **__environ;
#ifdef __USE_GNU
extern char **environ;
#endif
результат одинаковый на лине
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
 
extern char **environ;
extern char **__environ;
 
int main(void)
{
    char **p, **q;
    
    p = environ;
    q = __environ;
    
    while (*p || *q) {
        if (*p) {
            printf(" env: %s" "\n", *p);
            p++;
        }
        if (*q) {
            printf("_env: %s" "\n", *q);
            q++;
        }
    }
    return 0;
}
0
1 / 1 / 0
Регистрация: 08.10.2010
Сообщений: 36
05.11.2010, 08:45  [ТС]
Да, и ман я тоже уже читал... Ничего придумать,отличного от это одно и то же,я не могу... Но тем не менее,это не так по словам преподавателя
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
05.11.2010, 14:20
Ну строго говоря переменная начинающаяся с двух __ является системной и использовать ее программисту нельзя.
А чего там придумал преподаватель - кто его знает

Добавлено через 41 секунду
Разъве что в сорцах glibc поискать где создаются и используются environ & __environ
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
05.11.2010, 17:41
Может имеется в виду то, что environ передаётся в main третьим параметром?

C
1
2
3
int main (int argc, char **argv, char **envp)
{
}
0
1 / 1 / 0
Регистрация: 08.10.2010
Сообщений: 36
05.11.2010, 18:03  [ТС]
Передается 3м аргументом и? Объясните,пожалуйста
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
05.11.2010, 19:17
Дальше от этого третьего аргумента работаешь ровно так же, как и с переменной environ. По сути работа через getenv, глобальную переменную environ или третий параметр main - это одно и то же. Но с точки зрения формулировки - разное. Что там имел в виду твой преподаватель - я не знаю. Но других способов получить переменные окружения попросту нет. Хз как в других системах, но в линуксе точно нет
1
1 / 1 / 0
Регистрация: 08.10.2010
Сообщений: 36
10.11.2010, 13:58  [ТС]
Хорошо. Переменную __environ действительно не стоит использовать, так как она является системной. Что значит системная переменная в данном контексте и почему не следует ее использовать?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
10.11.2010, 17:14
Цитата Сообщение от Dami Посмотреть сообщение
Передается 3м аргументом и?
C
1
2
3
4
5
6
7
8
9
#include <stdio.h>
 
int main(int argc, char ** argv, char ** envp){
    char **p;
 
    for ( p = envp; *p; ++p )
        printf("%s\n", *p);
    return 0;
}
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
10.11.2010, 22:00
Что значит системная переменная в данном контексте и почему не следует ее использовать?
Имена переменных с __ зарезервированы для реализации C++
Нельзя использовать, потому что нельзя
и потому что могут быть изменены в будущем
Кроме этого другая реализация может не использовать эти переменные
0
1 / 1 / 0
Регистрация: 08.10.2010
Сообщений: 36
10.11.2010, 22:05  [ТС]
где-нибудь можно про это почитать?! Просто такой ответ не пройдет, я точно знаю =)
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
10.11.2010, 22:38
Цитата Сообщение от Dami Посмотреть сообщение
где-нибудь можно про это почитать?! Просто такой ответ не пройдет, я точно знаю =)
При такой постановке вопроса лучше всего это прочитать в тех книгах, по которым ведёт преподаватель или который он рекомендовал. Ибо, как мне кажется, он далеко не корифей, а потому ответ должен быть в первую очередь привычным (стереотипным) и только во вторую очередь правильным
0
1 / 1 / 0
Регистрация: 08.10.2010
Сообщений: 36
11.11.2010, 11:02  [ТС]
Как раз таки нет. Ответ не должен быть привычным. Обычно 90% ответов,которые я нахожу в интернете по заданному вопросу, он забраковывает. Он рекомендовал системное программирование в Unix(Хэвиленд, Грэй, Салама), но эту книгу тяжело найти, да и не уверен,что это там есть. Насчет преподавателя, загуглите Иртегов Д.В.
0
 Аватар для romex
45 / 45 / 9
Регистрация: 11.04.2010
Сообщений: 223
11.11.2010, 17:42
Да уж, хорош препод. Это не верно, почему не скажу, садитесь 2, читайте книжки.
0
1 / 1 / 0
Регистрация: 08.10.2010
Сообщений: 36
17.11.2010, 14:57  [ТС]
Здравствуйте. В общем, я сдал эту задачу и ответ на поставленный вопрос таков: Для работы с переменными среды нужно использовать **char Environ, так как именно эта переменная объявлена в стандарте POSIX. __environ тоже может работать,но главная проблема в том,что нет переносимости,т.е. не факт,что на другой системе будет работать =)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.11.2010, 14:57
Помогаю со студенческими работами здесь

Поменять значения переменных, используя условный оператор
Выполнить задания двумя способами: с использованием оператора if и с использованием условного оператора ?. Даны вещественные x1, x2,...

Поменять значения двух переменных, не используя третью
Как поменять значения двух переменных, не используя третью? Написать функцию swap, которая бы осуществляла данный обмен для целочисленных...

Используя JSON, вывести в ListBox значения переменных id и name
Доброе время суток Массив содержится в «items» из этого массива нужно вывести значения переменных id и name нужно вывести в list box...

Как поменять значения двух переменных используя метод?
Здравствуйте! Работая с указателями в С++ наткнулся на возможность поменять местами значения двух переменных при помощи функции void...

Поменять местами значения двух переменных, не используя дополнительной
4.Напишите программу,которая меняет местами значения двух переменных в памяти. В задаче 4 попробуйте найти решение которое не использует...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru