上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 36 下一页
摘要: 7.10 setjmp和longjmp函数 在C中,goto语句是不能跨越函数的。而执行这种跳转功能的是函数setjmp和longjmp。这两个函数对于处理发生在很深的嵌套函数调用中的出错情况非常有用。 考虑一下程序7 - 4的骨干部分。其主循环是从标准输入读1行,然后调用do_line处理每一输入行。该函数然后调用get_token从该输入行中取下一个记号。一行中的第一个记号假定是某种形式的一条... 阅读全文
posted @ 2011-10-12 15:48 郭—大—侠 阅读(278) 评论(0) 推荐(0) 编辑
摘要: 7.9 环境变量 如同前述,环境字符串的形式是: name = value UNIX内核并不关心这种字符串的意义,它们的解释完全取决于各个应用程序。例如, shell使用了大量的环境变量。其中某一些在登录时自动设置(如HOME,USER等),有些则由用户设置。我们通常在一个shell起动文件中设置环境变量以控制shell的动作。例如,若设置了环境变量M A I L PAT H,则它告诉Bourne... 阅读全文
posted @ 2011-10-12 15:46 郭—大—侠 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 7.8 存储器分配 ANSI C说明了三个用于存储空间动态分配的函数。 (1) malloc。分配指定字节数的存储区。此存储区中的初始值不确定。 (2) calloc。为指定长度的对象,分配能容纳其指定个数的存储空间。该空间中的每一位( b i t )都初始化为0。 (3) realloc。更改以前分配区的长度(增加或减少)。当增加长度时,可能需将以前分配区的内容移到另一个足够大的区域,以便在尾端... 阅读全文
posted @ 2011-10-12 15:43 郭—大—侠 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 7.7 共享库 现在,很多UNIX系统支持共享库。Arnold [1986] 说明了系统V上共享库的一个早期实现,G i n g e l l等[1987] 则说明了S u n O S上的另一个实现。共享库使得可执行文件中不再需要包含常用的库函数,而只需在所有进程都可存取的存储区中保存这种库例程的一个副本。程序第一次执行或者第一次调用某个库函数时,用动态连接方法将程序与共享库函数相连接。这减少了每个... 阅读全文
posted @ 2011-10-12 15:42 郭—大—侠 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 7.6 C程序的存储空间布局 由于历史原因,C程序一直由下列几部分组成: • 正文段。这是由CPU执行的机器指令部分。通常,正文段是可共享的,所以即使是经常执行的程序(如文本编辑程序、C编译程序、shell等)在存储器中也只需有一个副本,另外,正文段常常是只读的,以防止程序由于意外事故而修改其自身的指令。 • 初始化数据段(函数外)。通常将此段称为数据段,它包含了程序中需赋初值的变量。例如, C程... 阅读全文
posted @ 2011-10-12 15:36 郭—大—侠 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 7.5 环境表 每个程序都接收到一张环境表。与参数表一样,环境表也是一个字符指针数组,其中每个指针包含一个以null结束的字符串的地址。全局变量environ则包含了该指针数组的地址。 extern char **environ; 例如:如果该环境包含五个字符串,那么它看起来可能如图7 - 2中所示。 图7-2 由五个字符串组成的环境、 其中,每个字符串的结束处都有一个null字符。我们称env... 阅读全文
posted @ 2011-10-11 20:38 郭—大—侠 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 7.4 命令行参数 当执行一个程序时,调用exec的进程可将命令行参数传递给该新程序。这是UNIX shell的一部分常规操作。在前几章的很多实例中,我们已经看到了这一点。 程序7 - 3将其所有命令行参数都回送到标准输出上。注意,通常(UNIX echo(1)程序不回送第0个参数)。 #include int main(int argc, char *argv[]){ int i; ... 阅读全文
posted @ 2011-10-11 20:37 郭—大—侠 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 7.3 进程终止 有8种方式使进程终止(termination),其中5中为正常终止,他们是: l 从main返回; l 调用exit; l 调用_exit或_Exit; l 最后一个线程从其启动例程返回; l 最后一个线程调用pthread_exit; 异常终止有3种方式,他们是: l 调用abort; l 接收一个信号并终止; l 最后一个线程对取消请求做出响应。 上节提及... 阅读全文
posted @ 2011-10-11 20:34 郭—大—侠 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 7.2 main函数 C程序总是从main函数开始执行。main函数的原型是: int main(int argc, char *argv[]) ;其中,argc是命令行参数的数目,a rg v是指向参数的各个指针所构成的数组。7 . 4节将对命令行参数进行说明。当内核起动C程序时(使用一个exec函数,8.9节将说明exec函数),在调用main前先调用一个特殊的起动例程。可执行程序文件将此起动... 阅读全文
posted @ 2011-10-11 20:32 郭—大—侠 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 7.1 引言下一章将介绍进程控制原语,在此之前需先了解进程的环境。本章中将学习:当执行程序时,其main函数是如何被调用的,命令行参数是如何传送给执行程序的;典型的存储器布局是什么样式;如何分配另外的存储空间;进程如何使用环境变量;进程终止的不同方式等。另外,还将说明l o n g j m p和s e t j m p函数以及它们与栈的交互作用。本章结束之前,还将查看进程的资源限制。 阅读全文
posted @ 2011-10-11 20:31 郭—大—侠 阅读(100) 评论(0) 推荐(0) 编辑
上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 36 下一页