sysmodel 0 Posted April 23, 2017 Report Share Posted April 23, 2017 Добрый день! Я новичке в С и мне интересны некоторые особенности стандартных функций в частности getenv(). Кто нибудь может подсказать, как работает эта функция и как она получает адрес переменной из окружения? И вообще можно ли где-то посмотреть исходники стандартных функций? Quote Link to post Share on other sites
sysmodel 0 Posted April 26, 2017 Author Report Share Posted April 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... Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.