- 1、本文档共136页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux环境高级编程 第四讲 进程 进程 进程环境(第七章) 进程控制(第八章) 进程关系(第九章) 进程 进程环境(第七章) 进程控制(第八章) 进程关系(第九章) 进程环境 main函数和命令行参数 进程的启动和终止 环境表和环境变量 存储空间布局 存储器分配 setjmp和longjmp函数 进程环境 main函数和命令行参数 进程的启动和终止 环境表和环境变量 存储空间布局 存储器分配 setjmp和longjmp函数 main函数和命令行参数 通常,C程序总是从main函数开始执行 main函数原型 int main(int argc, char *argv[]); 参数 argc:命令行参数的个数 argv:指向命令行参数的各个指针所构成的数组 命令行 $./test Hello World main函数和命令行参数 参数agrv: main函数和命令行参数 程序演示(4.1) 进程环境 main函数和命令行参数 进程的启动和终止 环境表和环境变量 存储空间布局 存储器分配 setjmp和longjmp函数 进程的终止 8种方式使进程终止 正常终止 从main返回 调用exit 调用_exit或_Exit 最后一个线程从其启动例程返回 最后一个线程调用pthread_exit 异常终止 进程的终止 异常终止 调用abort 接到一个信号并终止 最后一个线程对取消请求做出响应 有关信号、线程的终止方式,后面讨论或者自学 进程终止 三个终止函数:exit、_Exit、_exit 函数原型: void exit(int status); void _Exit(int status); void _exit(int status); exit函数执行一个标准I/O库的清理关闭操作(为所有打开流调用fclose函数)后,进入内核 _Exit、_exit函数立即进入内核 进程终止(4.2) exit等函数的参数 status:进程的终止状态 程序演示查看进程终止状态 echo $? atexit函数 当进程终止时,程序可能需要进行一些自身的清理工作,如资源释放等等 atexit函数提供了进行这样工作的机会 它允许用户注册若干终止处理函数,当进程终止时,这些终止处理函数将会被自动调用 atexit函数 用于注册用户提供的终止处理函数 函数原型 int atexit(void (*func)(void)); 参数 func:函数指针,返回值为void,无参 返回值 成功返回0,出错返回非0值 atexit函数 程序演示(4.3) 注意:先注册的函数,后被运行。 调用_exit函数并不会触发终止处理函数 进程的启动和终止 进程环境 main函数和命令行参数 进程的启动和终止 环境表和环境变量 存储空间布局 存储器分配 setjmp和longjmp函数 环境表和环境变量 每个进程都会接收到一张环境表 通过environ找到环境表 extern char **environ; 环境字符串:name=value 环境表和环境变量 访问环境变量的方法 直接使用environ 使用getenv和putenv等函数 getenv函数用于获取环境变量值 函数原型 char* getenv(const char *name); 返回与name关联的value的指针,若未找到则返回NULL 返回的指针是指向新分配的内存,还是环境表中存在的值?(程序4.4) 设置环境变量 三种方法: putenv setenv unsetenv putenv函数将形式为name=value的字符串,放入环境表中;若name已经存在,则先删除其原来的定义。 函数原型: int putenv(char *str); 设置环境变量 setenv函数原型: int setenv(const char* name, const char* value, int rewrite); setenv将环境变量name的值设置为value。 若name已经存在 rewrite != 0,则删除其原先的定义 rewrite == 0,则不删除其原先的定义 设置环境变量 unsetenv函数用于删除某个环境变量 函数原型 int unsetenv(const char* name); 删除name的定义 疑问? 前两个设置环境变量的函数,都给出了自己的缓冲区存放环境变量。在环境表中是否直接使用这些缓冲区,还是环境表自己分配了缓冲区?(程序4.5) 进程环境 main函数和命令行参数 进程的启动和终止 环境表和环境变量 存储空间布局 存储器分配 setjmp和longjmp函数 C程序存储空间布局 C程序存储空间布局
您可能关注的文档
最近下载
- 我国散光矫正型人工晶状体临床应用专家共识.docx
- 科研伦理与学术规范.docx VIP
- 【教学评一体化】第三单元 赏山川日月,悟忧乐情怀 整体公开课一等奖创新教学设计-【大单元教学】统编版语文九年级上册名师备课系列.docx VIP
- 缅怀先烈精神-传承红色基因课件.pptx VIP
- 1.1 同底数幂的乘法 双减分层作业设计样例 2021—2022学年北师大版数学七年级下册 .docx VIP
- 朱良春杂病廉验特色发挥.docx
- 绘本《我妈妈》教学设计.docx
- 人教版(2024)英语七年级上册全册教案.DOCX VIP
- 在线网课知慧《音乐艺术概论》课后章节测试答案.docx
- 2024年中煤集团西南分公司招聘笔试参考题库附带答案详解.pdf
文档评论(0)