sysmodel Опубликовано 23 апреля, 2017 Жалоба Опубликовано 23 апреля, 2017 Добрый день! Я новичке в С и мне интересны некоторые особенности стандартных функций в частности getenv(). Кто нибудь может подсказать, как работает эта функция и как она получает адрес переменной из окружения? И вообще можно ли где-то посмотреть исходники стандартных функций? Цитата
sysmodel Опубликовано 26 апреля, 2017 Автор Жалоба Опубликовано 26 апреля, 2017 есть интересная особенность. Пишем не большую программу, в которой просто вызываем 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... Цитата
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.