UNIX环境高级编程笔记——7进程环境

来源:互联网 发布:索尼xz1国行网络 编辑:程序博客网 时间:2024/05/21 17:43

main函数

    当内核执行C程序时,使用的是一个exec函数。在调用main之前先调用一个特殊的启动例程。可执行程序文件将此启动例程指定为程序的起始地址——这是由链接编辑器设置的,而连接编辑器则有C编译器通常是cc调用。启动例程从内核取得命令行参数和环境变量值,然后为按上述方式调用main函数做好安排。


进程终止

    有3个函数用于正常终止一个程序:_exit和_Exit立即进入内核,exit则先执行一些处理(包括调用执行各终止处理程序,关闭所有标准I/O流等),然后进入内核。

    main函数返回以整型值调用与exit是等价的,所以,exit(0)等价于return(0)。


    atexit函数用于注册exit函数,一个进程可以登记32个函数,这些函数由exit自动调用。调用顺序与他们登记时候的顺序相反。例如:登记func1(),func2(),则调用时先调用func2(),func1().

    

    命令行参数

    int main(int argc, char *argv[]),标准都要求argv[argc]是一个空指针。有时候可以用来控制循环。



    环境表

               

    与参数表一样,环境表也是一个字符指针数组,由全局变量environ维护。按照惯例,环境由:name=value来表示,习惯上名字用大写。

    通常用getenv和putenv函数来访问特定的环境变量,二不是用environ变量。但是如果要产看整个环境,则必须使用environ指针。


    C程序的存储空间布局

    主要分为:1.正文段;2.初始化数据段;3.非初始化数据段;4.栈;5.堆

    初始化的数据和正文由exec从程序文件中导入;非初始化的数据由exec初始化为0;最高位地址用于保存命令行参数和环境变量;高位地址作为栈空间;地位地址靠近非初始化数据的地址作为堆空间。所以堆顶和栈底之间未用的虚地址空间很大。


    共享库

    共享库即动态链接库,使得可执行文件的正文和数据段的长度明显减小。可以用size命令来查看可执行文件的大小,例如:size nvrsync。

  

    存储器分配

    三个用于存储空间动态分配的函数:

    1.malloc;分配指定字节数的存储区,内容未定义;

    2.calloc:为指定数量指定长度的对象分配存储空间,且初始化为0;

    3.realoc:更改以前分配区的长度(增加或减少)。


    环境变量

    环境ifUC换的形式通常为:name=nalue。

    跟环境变量有关的函数主要有3个,函数原型是:

    #include <stdlib.h>

    int putenv(char *str);

    int setenv(const char *name, const char *value, int rewrite);

    int unsetenv(const char *name);


    第七章内容基本如上,希望可以通过以上笔记摘要迅速回顾内容,并学以致用。

0 0
原创粉丝点击