sysmodel

функция getenv()

2 сообщения в этой теме

Добрый день!

Я новичке в С и мне интересны некоторые особенности стандартных функций в частности getenv(). Кто нибудь может подсказать, как работает эта функция и как она получает адрес переменной из окружения?

И вообще можно ли где-то посмотреть исходники стандартных функций?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

есть интересная особенность.

Пишем не большую программу, в которой просто вызываем getenv() для какой нибудь переменной окружения и получаем постоянно разные адреса для одной и тоже переменной:

sysmodel@ubuntu:~/C_files$ ./getenv PATH
PATH is at 0xff811e61
sysmodel@ubuntu:~/C_files$ ./getenv PATH
PATH is at 0xffc88e61
sysmodel@ubuntu:~/C_files$ ./getenv PATH
PATH is at 0xff8e5e61

Закономерности я в этом пока не нашел, но судя по всему это проделки ОС.

Но вот с другой стороны, когда выполняется программа в gdb, то тут всегда один и тоже адрес:

(gdb) c
Continuing.
PATH is at 0xffffde6d
[Inferior 1 (process 8052) exited normally]
(gdb) run PATH
Starting program: /home/sysmodel/C_files/getenv PATH

Breakpoint 1, 0x0804847a in main ()
(gdb) c
Continuing.
PATH is at 0xffffde6d
[Inferior 1 (process 8056) exited normally]
(gdb) run PATH
Starting program: /home/sysmodel/C_files/getenv PATH

Breakpoint 1, 0x0804847a in main ()
(gdb) c
Continuing.
PATH is at 0xffffde6d
[Inferior 1 (process 8057) exited normally]

Кто нибудь может объяснить эту особенность? Хотя возможно в gdb просто подгружает в выполняемою программу собственный env, например, с помощью execle...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас