APUE 进程环境

进程的基本环境

1、main主函数原型

int main( int argc, char *argv[]);

在exec函数执行main函数前,先调用一个特殊的启动例程,改启动例程为程序的起始地址,

目的是为了从内核获取进程的命令行参数和环境变量

2、进程的终止

终止进程的方法有好多种,常用的有

(1)从main返回

return 其实是调用exit函数。

exit函数执行标准I/O库的清理关闭工作,fclose所有已打开的流,flush已修改数据。

(2)abort

(3)调用exit函数

(4)接收到信号

...

3、命令行参数

argc为命令行参数的个数,argv为命令行数组。数组大小为argc+1,最后一个值为NULL

4、环境表

全局变量environ指向环境表的起始地址,环境表是一个字符串数组,数组中存放的是name=value形式的C 字符串

5、C程序的存储空间布局

技术分享

正文段是可以共享的,是只读的,防止被修改。bss段是不存储在磁盘程序文件中的,因为该段的变量都会被exec函数初始化为0或null,

正文段和初始化的数据会被存放在磁盘程序文件中。

命令行参数和环境变量存储在最高的地址空间内,对他们的修改相当麻烦,因为空间有限。有时需要重新申请空间,或者复制空间。

6、共享库

共享库其实是已被编译的中间文件,二进制形式。共享库使得可执行文件中不在需要包含公用的函数,只需引用共享库的函数即可。

调用动态库的好处在于可以减少可执行文件的大小,更新库不用修改源程序,坏处在于增加了运行时间开销,在当程序第一次被执行或者第一次调用共享库时。

-static参数指定调用静态库,不加则调用动态共享库

size 命令查看程序各个字段的大小

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。