摘要:
7.10 setjmp和longjmp函数 在C中,goto语句是不能跨越函数的。而执行这种跳转功能的是函数setjmp和longjmp。这两个函数对于处理发生在很深的嵌套函数调用中的出错情况非常有用。 考虑一下程序7 - 4的骨干部分。其主循环是从标准输入读1行,然后调用do_line处理每一输入行。该函数然后调用get_token从该输入行中取下一个记号。一行中的第一个记号假定是某种形式的一条... 阅读全文
摘要:
7.9 环境变量 如同前述,环境字符串的形式是: name = value UNIX内核并不关心这种字符串的意义,它们的解释完全取决于各个应用程序。例如, shell使用了大量的环境变量。其中某一些在登录时自动设置(如HOME,USER等),有些则由用户设置。我们通常在一个shell起动文件中设置环境变量以控制shell的动作。例如,若设置了环境变量M A I L PAT H,则它告诉Bourne... 阅读全文
摘要:
7.8 存储器分配 ANSI C说明了三个用于存储空间动态分配的函数。 (1) malloc。分配指定字节数的存储区。此存储区中的初始值不确定。 (2) calloc。为指定长度的对象,分配能容纳其指定个数的存储空间。该空间中的每一位( b i t )都初始化为0。 (3) realloc。更改以前分配区的长度(增加或减少)。当增加长度时,可能需将以前分配区的内容移到另一个足够大的区域,以便在尾端... 阅读全文
摘要:
7.7 共享库 现在,很多UNIX系统支持共享库。Arnold [1986] 说明了系统V上共享库的一个早期实现,G i n g e l l等[1987] 则说明了S u n O S上的另一个实现。共享库使得可执行文件中不再需要包含常用的库函数,而只需在所有进程都可存取的存储区中保存这种库例程的一个副本。程序第一次执行或者第一次调用某个库函数时,用动态连接方法将程序与共享库函数相连接。这减少了每个... 阅读全文
摘要:
7.6 C程序的存储空间布局 由于历史原因,C程序一直由下列几部分组成: • 正文段。这是由CPU执行的机器指令部分。通常,正文段是可共享的,所以即使是经常执行的程序(如文本编辑程序、C编译程序、shell等)在存储器中也只需有一个副本,另外,正文段常常是只读的,以防止程序由于意外事故而修改其自身的指令。 • 初始化数据段(函数外)。通常将此段称为数据段,它包含了程序中需赋初值的变量。例如, C程... 阅读全文