unix环境高级编程答案.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
unix环境高级编程答案 【篇一:unix环境高级编程-第7章unix进程的环境】 security 标 题:unix环境高级编程-第7章unix进程的环境 发信站:bbs 水木清华站(mon mar 27 15:53:35 2000) 第七章=unix进程的环境? 7?4=引言? 下一章将介绍进程控制原语,在此之前需先了解进程的环境。在本 章中我们将说明.当执行 一通程序时,其main函数是如何被调用的,命令行参数是如何传 送给执行程序的;典型的存 储器布局是什么样式;如何分配另外的存储空间;进程如何使用环 境变量;进程终止的不同 方式等。另外,我们也将说明longjmp和setjmp函数以及它们与 栈的交互作用。在本章结束 之前,我们将査看进程的资源限制。? 7?2Zmain 函数? 一道c程序总是从main函数开始执行。main函数的原型是:? int main (int argc,char * argv [] ); ? 其中,argc是命令行参数数,argv是指向参数的各个指针所构成的 数组。在7?4节中我们将 对命令行参数进行说明。? 在系统核起动一道c程序时(用一个exec函数,我们将在8?9节中 n前先调用一个材殊的起动例程。可执行程序文件将此起动例程指 定为程序的起始 地址Kcd2 3这是由连接编辑程序设置的,而连接编辑程序则由c编译程序(通 常是cc)调用。起动例程 从系统核取得命令行参数和环境变量值,然后为调用main函数作 好安排。? 7?3=进程终止? 有五种方式使进程终止:? 正常终止? 从main返回? 调用 exit? 调用迹茫模*常病Mxit? 2?异常终止? (a)调用abort(第十章)? (b)由一个信号终止(第十章)? 上节提及的起动例程是这样编写的,使得从main返回后即调用 exit函数。如果将起动例程以 c代码工表示(实际上该例程常常用汇编语言编写),则它调用main 函数的形式可能是:? exitfmai n(argc,argv));? exit和迹茫模*常病絮xit函数? exit和迹茫模*常病絮xit函数正常终止一个程序:迹茫模*常病 絮xit立即进入 系统核, exit则先执行一些清除处理(包括的用执行各终止处p2程序,关闭 所有标准i / 0流等)? #include stdlib?h? void exit(int ?status);?? #inelude unistd?h? void 迹茫模* 常病xit (int ?status);?? 我们将在8?5节讨论这两个函数对其它进程,例如终止进程的父、 子进程的影响。? 使用不同头文件的原因是:exit是由ansic说明的,而迹茫模*常 病緊xit则是由posix?1 说明的。? 由于历史原因,exit函数总是执行一个标准i/o库的清除关闭操作: 对于所有打开 流调用fcl ose函数。回忆5?5节,这造成所有在缓存中的数据都被刷新(写到 文件上)。? exit和迹茫模*常病絮xit都带一个整型参数,我们称 此为终止状态。大多数uni x shell都 提供检査一个 进程终止状态的方法。如果(a)若调用这些函数时不带终止状态,或 (b)main执行了 一个无返 回值的return语句,或(c)main执行隐式返回,则该进程的终止状 态是末定义的。这就意味 下列经典性的c 下列经典性的c语言程序? 鋼ndude stdio?h? main ()? {? ZSprintf (hello,world \n);? }? 是不完整的,因为main函数没有使用return语句返回(隐式返回), 它在返回到c的起动例程 时并没有返回一个值(终止状态)。另外,若使用? return(O);? 或者? exit(O); ? 则向启动执行此程序的进程(常常是一个shell进程)返回终止状态0。 另外,main函数的说明 实际上应当是:? int main(void)? 在下一章,我们针会了解到一个进程如何一道程序执行,如何等待 执行该程序的进程完成, 然后取得其终止状态。? 将main说明为返回一个整型以及用exit代替return,对某些c编 译程序和unix lin t⑴程序 而言会产生不必要的警告信息。问题是这些编译程序并不了解在 main中的exit与r eturn语句 的作用相同。警告信息可能是control reaches end of nonvoid functiorio (控 制到达 非void函数的结束处),避开这种警告信息的一种方法是:在main 中使用return语 句而不是e xito但是这样做的结果是使我们不能用unixo ? grep公用程序来找出一道程序中的所有exit调用。另外一个解决方 法是将main说明

文档评论(0)

189****2507 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档