apue第七章 进程环境 笔记

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值