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 命令查看程序各个字段的大小

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值