4.进程环境

2016-12-14  本文已影响0人  大雄good

进程环境

本节主要介绍Unix的进程环境。

1.命令行参数和环境表

大多数Unix系统支持main函数带3个参数:

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

argc表示命令行参数数目,argv是指向参数的指针所构成的数组,envp是环境表地址。

对于命令行参数,可以通过下面的程序进行理解:

#include "apue.h"

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

    for (i = 0; i < argc; i++)      /* echo all command-line args */
        printf("argv[%d]: %s\n", i, argv[i]);
    exit(0);
}

执行该程序可以的到:

命令行参数

环境表也是一个字符指针数组,其中每个指针包含一个以null结束的C字符串的地址,全局变量environ包含了该指针数组的地址。其结构可以由下图表示:

环境表

通常可以用getenvputenv来访问特定的环境变量,但是要查看整个环境,则必须使用environ指针。

2.C程序的存储空间

C程序一直由下列几部分组成:

下图给出了存储空间的典型布局:

存储空间布局.png

3.共享库

共享库使得可执行文件中不再需要包含公用的库函数,而只需在所有进程都可引用的存储区中保存这种库例程的一个副本。程序第一次执行或者第一次调用某个库函数时,用动态链接方法将程序与共享库函数相链接。

这样的好处在于减少了每个可执行文件的长度,缺点是增加了运行时间开销,时间开销主要发生在该程序第一次被执行时,或者共享库第一次被调用时。

4.存储空间分配

ISO C说明了3个用于存储空间动态分配的函数:

#include <stdlib.h>
void *malloc(size_t size);
void *calloc(size_t nobj, size_t size); 
void *realloc(void *ptr, size_t newsize);
/* 返回值:成功返回非空指针,失败返回NULL*/
void free(void *ptr);
上一篇下一篇

猜你喜欢

热点阅读