apue第七章 进程环境 笔记

来源:互联网 发布:淘宝退货售后卡怎么写 编辑:程序博客网 时间:2024/05/16 15:11

7.2 注册atexit函数

看代码:

#include <stdio.h>#include <stdlib.h>static void exit1(){    printf("%s\n", __FUNCTION__);}static void exit2(){    printf("%s\n", __FUNCTION__);}int main(){    if (atexit(exit1) != 0 || atexit(exit2) != 0){        printf("register exit faield\n");        exit(1);    }    printf("%s is done\n", __FUNCTION__);}

输出:

allen@allenPC:~/code/apuecode$ ./a.out
main is done
exit2
exit1

7.5环境表

每个程序都会收到一张环境表.getenv可获取:

#include <stdio.h>#include <stdlib.h>#include <unistd.h>int main(int arg, char** argc){    if (arg < 2){        printf("usage env\n");        exit(1);    }    for (int i = 1; i < arg; ++i){        char* res = getenv(argc[i]);        if (NULL != res){            printf("get %s env is %s\n", argc[i], res);        }    }    exit(0);}

比如:

allen@allenPC:~/code/apuecode$ ./a.out OS TERM HOME
get TERM env is xterm
get HOME env is /home/allen

7.6 C程序的存储空间布局

程序的逻辑布局:

1)正文段: CPU执行的机器指令部分. 可共享.

2)初始化数据段:包含了程序中需要明确赋初值.

3)非初始化数据段.在程序执行之前,内核将此段中的数据初始化为0或者null. 出现在任何函数外的c声明:long sum[1000]

4)栈

5)堆

需要放在程序中的段:正文段和初始化数据段


7.7共享库

7.8内存分配

free释放的空间通常被送入可用内存池.

malloc分配的空间比要求的要大.额外的空间用来记录管理信息-分配块的长度,指向下一个可分配块的指针..


7.10 setjmp longjmp

c中goto是不能跨越函数.而上面提到的两个能.对于处理发生在深层嵌套函数里处理出错是非常有用的.



0 0