linux@ubuntu:~/workdir/Virtual_Memeory_Manage$ ./a.out 10 10 10 ./a.out 10 10 10 TERM=xterm SHELL=/bin/bash ........#这里省略若干输出 MAIL=/var/mail/linux PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/linux/workdir/cross_tool_chair/arm-cortex_a8/bin PWD=/home/linux/workdir/Virtual_Memeory_Manage LANG=en_US.UTF-8 SHLVL=1 HOME=/home/linux LOGNAME=linux SSH_CONNECTION=192.168.0.1 32071 192.168.0.251 22 LESSOPEN=| /usr/bin/lesspipe %s LESSCLOSE=/usr/bin/lesspipe %s %s _=./a.out OLDPWD=/home/linux/workdir 以上是我将楼上---陈健程序打印出来的效果,也就是说argv[0]对应“./a.out”这个参数,如果运行程序时跟上参数则对应上面输出,跟多少参数输出多少参数。输入参数输出完毕后输出的参数为环境变量(???),因为我们程序是数组输出(地址由低到高排列),所以作者的思路很对,但对于初学者来说还是显得有些信息量不足!!对于main函数的argc和argv的解释可以google解决!!
您好,非常感谢您的书。 不知道可否加入实模式保护模式的细节内容,以及内核中进程切换的介绍。
谢谢你的建议。不过实模式、保护模式与本书的主旨无关,是不会加入的。本书希望尽可能少地依赖于平台,只有在不得不讲的时候才讲平台相关的内容。哪位仁兄有兴趣也可以把我的书针对别的平台改编,只要严格遵守GFDL就行。进程切换我会尽量再多讲一点的,但也不会具体到内核实现。
图 20.4. 进程地址空间 图中的“共享库和内存映射区”是啥意思? 是不是“共享库的内存映射区”。
我是想说共享库的映射区和mmap内存映射区,其实共享库也是mmap映射的一种
有一个错误,纠正下: 用户空间是从0xbfffffff开始的,依次是命令行参数、环境变量。可以用下面的例子验证: #include <stdio.h> int main(int argc, char** argv) { int i; for(i=0; argv[i]!=NULL; i++) printf("%s\n", argv[i]); for(i=argc + 1; argv[i]!=NULL; i++) printf("%s\n", argv[i]); return 0; } 与图20-4不一致。 另外,这本书写的很好,这本书使我获益良多,谢谢作者。
你的程序恰恰证明了我的图是对的。命令行参数在低地址,环境变量在高地址。注意数组是从低地址往高地址排的。
你说的是正确的,是我忽略了
如果您有建设性意见,哪怕只是纠正一个错别字,也请不吝赐教,您留下的姓名和email将会出现在本书前言的致谢中。再次感谢您的宝贵意见!