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... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.