mos*_*svy 13
您的程序没有对环境的引用,而是它的完整副本。
命令行参数和环境字符串(因为它们被传递给execve(2)
系统调用)都打包在一起并复制到进程的地址空间中 [1]。
在一个典型的实现 [2] 中,NULL
指向它们的两个终止的指针列表(代表参数列表和环境)在堆栈上提供给程序入口点(_start
),启动代码(在 之前运行main()
)将将char **environ
全局变量指向后者的开头。
该getenv(3)
功能只是查看该environ
列表并依次比较每个条目。
当某些新条目必须添加到环境中时(如setenv(3)
),该environ
列表将被重新定位到其他地方。
[1] 在 Linux 上,参数列表和环境变量的地址可以作为 的第 48 个和第 50 个字段访问/proc/PID/stat
,请参见procfs(5)
。
[2] 在 glibc 中,_start
将 pop argc
,指向argv
堆栈顶部,__libc_start_main
并将设置__environ
( 的别名environ
)为argv + argc + 1
。
归档时间: |
|
查看次数: |
318 次 |
最近记录: |