




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第第 7 7 章章 进程环境 进程环境 7 2 main7 2 main 函数函数 C 程序总是从 main 函数开始执行 Main 函数的原型是 int main int argc char argv 0 其中 argc 是命令行参数的数目 argv 是指向参数的各个指针所 构成的数组 7 3 7 3 进程终止 进程终止 有 8 种方式使进程终止 其中用 5 种为正常终止 他们是 1 从 main 返回 2 调用 exit 3 调用 exit 或 Exit 4 最后一个线程从其启动例程返回 5 最后一个线程调用 pthread exit 异常终止有 3 种 分别是 6 调用 abort 7 接到一个信号并终止 8 最后一个线程对取消请求做出响应 1 exit 函数 有三个函数用于正常终止一个程序 include void exit int status void Exit int status include void exit int status 正常终止程序 Exit 和 exit 立即进入内核 exit 要先执行清 理工作 包括关闭所有打开的流 以及调用终止处理程序 2 atexith 函数 调用 atexith 函数来登记终止处理程序 include int atexit void func void 返回值 成功返回 0 出错返回非 0 值 登记终止处理函数 这些函数会被 exit 自动调用 调用的顺序与 登记的顺序相反 登记多次会导致调用多次 7 5 7 5 环境表环境表 每个程序都会接受到一张环境表 与参数表一样 环境表也是一 个字符指针数组 其中每一个数组包含一个已 null 结束的 C 字符串 的地址 全局变量 environ 则包含了该指针数组的地址 extern char environ 7 67 6 C C 程序的存储空间布局程序的存储空间布局 C程序一直由下列几部分组成 正文段 这是由C P U执行的机器指令部分 通常 正文段是可共 享的 所以即使是经常环境指针环境表环境字符串执行的程序 如文 本编辑程序 C编译程序 s h e l l等 在存储器中也只需有一个副 本 另外 正文段常常是只读的 以防止程序由于意外事故而修改 其自身的指令 初始化数据段 通常将此段称为数据段 它包含了程序中需赋初 值的变量 例如 C程序中任何函数之外的说明 int maxcount 99 使此变量以初值存放在初始化数据段中 非初始化数据段 通常将此段称为b s s段 这一名称来源于早期 汇编程序的一个操作符 意思是 block started by symbol 由符 号开始的块 在程序开始执行之前 内核将此段初始化为0 函 数外的说明 long sum 1000 使此变量存放在非初始化数据段中 栈 自动变量以及每次函数调用时所需保存的信息都存放在此段 中 每次函数调用时 其返回地址 以及调用者的环境信息 例如 某些机器寄存器 都存放在栈中 然后 新被调用的函数在栈上为 其自动和临时变量分配存储空间 通过以这种方式使用栈 C函数 可以递归调用 堆 通常在堆中进行动态存储分配 由于历史上形成的惯例 堆 位于非初始化数据段顶和栈底之间 7 8 7 8 存储器分配 存储器分配 ISO C 说明了三个用于存储空间动态分配的函数 1 malloc memory allocation 分配指定字节数的存储区 初始值不定 2 calloc 为指定大小指定个数的元素分配存储区 每一个位 置都初始化为 0 3 realloc 更改以前分配区的长度 include void malloc size t size void calloc size t nobj size t size void realloc void ptr size t newsize 三个函数的返回值 若成功则返回非空指针 若出错返回 NULL void free void ptr free 释放 ptr 指向的存储空间 7 9 7 9 环境变量 环境变量 getenv 函数 include char getenv const char name 返回值 指向与 name 关联的 value 的指针 若为找到则返回 NULL 注 此函数返回一个指针 它指向 name value 字符串中的 value 对于各种环境表函数的支持的三个函数的原型 include int putenv char str int setenv const char name const char value int rewrite int unsetenv const char name 三个函数的返回值 若成功则返回 0 若出错则返回非 0 值 这三个函数的操作是 1 putenv 取形式为 name value 的字符串 将其放到环境表中 如果 name 已存在 则先删除原来的定义 2 setenv 讲 name 设置为 value 如果环境中 name 已经存在 那么 a 若 rewrite 非 0 则首先删除其现有的定义 b rewrite 为 0 则不删除其现有定义 name 不设置为新的 value 而 且也不出错 3 unsetenv 删除 name 的定义 及时不存在这种定义也不出错 7 10 setjmp7 10 setjmp 和和 longjmplongjmp 函数 函数 在 C 中 goto 语句是不能跨越函数的 而执行这类跳转功能 的是函数 setjmp 和 longjmp include int setjmp jmp buf env 返回值 若直接调用则返回 0 若从 longjmp 调用返回则返回 非 0 值 void longjmp jmp buf env int val 实现在栈上跳过若干帧 返回到当前函数调用路径上的某一个函 数中 在希望返回到的位置调用 setjmp 此次直接调用返回 0 调 用 longjmp 的第一个参 数是 setjmp 的 env env 应定义为全局变量 因为要在另一个函数中使用 第二个参数是非 0 的 val val 将作 为这一次 setjmp 的返回值 常见的用法 if setjmp jmpbuffer 0 f1 f1 longjmp jmpbuffer 1 7 11 getlimit7 11 getlimit 和和 setrlimitsetrlimit 函数 函数 查询和更改进程的资源限制 include int getrlimit int resource struct rlimit rlptr int setrlimit int resource const struct rlptr 两个函数的返回值 若成功则返回 0 若出错则返回非 0 值 对这两个函数的每一次调用都会指定一个资源以及一个指向下列 结构的指针 struct rlimit rlim t rlim cur soft limit current limit rlim t rlim max har
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030全球及中国有机婴儿粉行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
- 2025-2030全球及中国安卓信息亭软件行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
- 2025-2030全球及中国医学术语软件行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
- 比斯拉马语中的传统食物词汇研究论文
- 2025-2030全球及中国云测试行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
- 2025-2030全球及中国SLG游戏行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
- 2025年小学语文毕业升学考试全真模拟卷(语文知识趣味竞赛模拟试题册实战解析)
- 2025-2030便携式储能电源行业发展分析及发展趋势与投资前景预测研究报告
- 《青稞种植的土壤要求及改良策略研究》论文
- 2025-2030企业管理软件产业市场深度分析及前景趋势与投资研究报告
- 《公共营养师》课件
- 卡乐控制器说明书简易
- 作文讲解细节描写公开课一等奖省优质课大赛获奖课件
- 门诊慢特病病种待遇认定申请表
- 雷锋叔叔你在哪里评课稿
- 中南大学湘雅医院进修汇报演示文稿
- 《艺术学概论考研》课件艺术本体论-模仿论
- 电厂防腐涂装培训ppt课件
- 《汽车座椅制造工艺》PPT课件
- 履带-轮式爬楼梯电动轮椅设计【带图纸】
- 毕业论文小型玉米脱粒机的设计
评论
0/150
提交评论