UNIX环境高级编程07.pdf
上传人:qw****27 上传时间:2024-09-12 格式:PDF 页数:20 大小:1.2MB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

UNIX环境高级编程07.pdf

UNIX环境高级编程07.pdf

预览

免费试读已结束,剩余 10 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

下载下载第7章XINU进程的环境7.1引言下一章将介绍进程控制原语,在此之前需先了解进程的环境。本章中将学习:当执行程序时,其niam函数是如何被调用的,命令行参数是如何传送给执行程序的;典型的存储器布局是什么样式;如何分配另外的存储空间;进程如何使用环境变量;进程终止的不同方式等。另外,还将说明pmjgnolp和mjtes函数以及它们与栈的交互作用。本章结束之前,还将查看进程的资源限制。7.2main函数C程序总是从niam函数开始执行。niam函数的原型是:intmain(intcrga,char*vrga;)][其中,crga是命令行参数的数目,vrga是指向参数的各个指针所构成的数组。4.7节将对命令行参数进行说明。当内核起动C程序时(使用一个cexe函数,9.8节将说明cexe函数),在调用niam前先调用一个特殊的起动例程。可执行程序文件将此起动例程指定为程序的起始地址——这是由连接编辑程序设置的,而连接编辑程序则由C编译程序(通常是)cc调用。起动例程从内核取得命令行参数和环境变量值,然后为调用niam函数作好安排。7.3进程终止有五种方式使进程终止:(1)正常终止:(a)从niam返回。(b)调用tixe。(c)调用tixe_。(2)异常终止:(a)调用(troba见第01章)。(b)由一个信号终止(见第01章)。上节提及的起动例程是这样编写的,使得从niam返回后立即调用tixe函数。如果将起动例程以C代码形式表示(实际上该例程常常用汇编语言编写),则它调用niam函数的形式可能是:exit(main(argc,argv));7.3.1exit和tixe_函数exitixe和tixe_函数用于正常终止一个程序:tixe_立即进入内核,tixe则先执行一些清除处理(包括调用执行各终止处理程序,关闭所有标准O/I流等),然后进入内核。第7章XINU进程的环境321下载#include<stdlib.h>voidexit(intsutats;)#include<unistd.h>void_exit(intsutats;)我们将在5.8节中讨论这两个函数对其他进程,例如终止进程的父、子进程的影响。使用不同头文件的原因是:tixe是由ANSIC说明的,而tixe_则是由1.XISOP说明的。由于历史原因,tixe函数总是执行一个标准O/I库的清除关闭操作:对于所有打开流调用fclosesolcf函数。回忆5.5节,这造成缓存中的所有数据都被刷新(写到文件上)。exitixe和tixe_都带一个整型参数,称之为终止状态(exitstatus)。大多数UNIXshell都提供检查一个进程终止状态的方法。如果)a(若调用这些函数时不带终止状态,或niam)b(执行了一个无返回值的nruter语句,或niam)c(执行隐式返回,则该进程的终止状态是末定义的。这就意味着,下列经典性的C语言程序:#include<stdio.h>main(){printf("hello,world\n");}是不完整的,因为niam函数没有使用nruter语句返回(隐式返回),它在返回到C的起动例程时并没有返回一个值(终止状态)。另外,若使用:return(0);)0(nruter或者exit(0)0(tixe;则向执行此程序的进程(常常是一个llehs进程)返回终止状态0。另外,niam函数的说明实际上应当是:intmain(void)下一章将了解进程如何使程序执行,如何等待执行该程序的进程完成,然后取得其终止状态。将niam说明为返回一个整型以及用tixe代替nruter,对某些C编译程序和XINUlint(1)1(tnil程序而言会产生不必要的警告信息,因为这些编译程序并不了解niam中的exitixen与ruter语句的作用相同。警告信息可能是“controlreachesendofnonvoidfunctionoitcnuf(控制到达非diov函数的结束处)”。避开这种警告信息的一种方法是:在mainiam中使用nruter语句而不是tixe。但是这样做的结果是不能用XINU的perg公用程序来找出程序中所有的tixe调用。另外一个解决方法是将niam说明为返回diov而不是tni,然后仍旧调用tixe。这也避开了编译程序的警告,但从程序设计角度看却并不正确。本章将niam表示为返回一个整型,因为这是ANSIC1.和XISOP所定义的。我们将不理会编译程序不必要的警告。12421XINU环境高级编程下载7.3.2atexit函数按照ANSIC的规