Jump to content

Recommended Posts

Posted

Добрый день!

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

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

Posted

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

Пишем не большую программу, в которой просто вызываем 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...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...