7.1 引言

本章学习:当程序执行时,其main函数使如何被调用的命令行参数是如何传给新程序的典型的存储空间布局如何分配另外的存储空间进程如何使用环境变量进程的各种不同的终止方式另外还说明longjmp和setjmp函数以及它们与栈的交互作用还有查看进程的资源限制

7.2 main函数

c程序总是从main函数开始执行。main函数的原型是:
int main(int argc, char *argv[]);
其中,argc是命令行参数的数目argv是指向参数的各个指针所构成的数组

7.3 进程终止

有8种方式是进程终止(termination),其中5种为正常终止
(1)从main返回
(2)调用exit
(3)调用_exit或_Exit
(4)最后一个线程从其启动例程返回
(5)从最后一个线程调用pthread_exit
异常终止
(6)调用abort
(7)接到一个信号
(8)最后一个线程对取消请求做出响应
1. 退出函数
3个函数用于正常终止一个程序:_exit 和 _EXIT立即进入内核,exit则先执行一些清理处理,然后返回内核。
#Include <stdlib.h>
void exit(int status);
void _Exit(int status);
#include <unistd.h>
void _exit(int status);

2. 函数atexit

一个进程可以等级多至32个函数,这些函数将由exit自动调用。我们称这些函数为终止处理程序(exit handler),并调用atexit函数来登记这些函数。
#include <stdlib.h>
int atexit(void (*func)(void));

7.4 命令行参数

调用exec的进程可将命令行参数(Command-Line Arguments)传给该新程序

7.5 环境表

每个程序都接收到一张环境表。是一个字符指针数组

7.6 C程序的存储空间布局

C程序一直有下列几个部分组成:
(1)正文段(Text segment)。这是CPU执行的机器指令部分。
(2)初始化数据段(Initialized data segment)。它包含程序中需明确赋初值的变量,例如
int maxcount = 29;
(3)未初始化数据段(Uninitialized data segment)。例如long sum[1000];
(4)栈(stack)。自动变量以及每次函数调用时所需保存的信息都保存在此段中。比如每次函数调用时,其返回地址以及调用者的环境信息都存在栈中。
(5)堆(Heap)。通常在堆中进行动态存储分配。

7.7 共享库

共享库使得可执行文件中不在需要包含共有的库函数,而只需在所有进程都可引用的存储区中保存这种库例程的一个副本.程序第一次执行或者第一次调用某个库函数时,用动态链接方法将程序与共享库函数相链接.这减少了每个执行文件的长度,但增加了一些时间开销.
共享库的另一个优点是可以用库函数的新版本替代老版本而无需对使用该程序重新连接编译.

7.8 存储空间分配

ISO C说明了3个用于存储空间动态分配的函数.
(1)malloc ,分配指定字节数的存储区.此空间的初始值不确定
(2)calloc,为指定数量指定长度的对象分配存储空间.该空间中的每一位都初始化为0
(3)realloc,增加或减少以前分配区的长度.当增加长度是,可能需将以前分配去的内容移到另一个足够大的区域,新增区域的初始值不确定
#include <stdlib.h>
void *malloc(size_t size);
void *calloc(size_t nobj, size_t size);
void *realloc(void *ptr, size_t newsize);void free(void *ptr);

若调用malloc函数,但却忘了调用free函数,那么该进程占用的存储空间就会持续增加

7.9 环境变量

7.10 函数setjmp和longjmp

7.11 函数getrlimit和函数setrlimit

每个进程都有一组资源限制,其中一些可以用getrlimit和setrlimit函数查询和更改

7.12 小结

本章说明了一个进程使如何启动和终止的,如何向其传递参数表和环境.虽然参数表和环境都不是内核进行解释的,但内核调用exec将这两者传递给新进程的作用.
还介绍了c程序的经典存储空间布局,以及一个进程如何动态地分配和释放存储空间.
习题:为什么使用共享库文件大小由很大变化? 没有使用共享库是,可执行文件的大部分都被标准I/O库占用
这段代码不正确,自动变量val已经不存在之后,代码还通过指针ptr引用这个已经不存在的自动变量

UNIX环境高级编程之第7章:进程环境相关推荐

  1. UNIX环境高级编程之第4章:文件和文件夹-习题

    4.1 stat函数是尾随符号链接的,所以用stat替换lstat不会显示符号链接的信息 4.2 在一个目录下先再shell中输入umask shell进程再进行创建文件的操作.其权限抖都会被屏蔽 4 ...

  2. unix环境高级编程之 read与write 函数详解

    学习记录:unix环境高级编程之 read 与write  函数详解 备注:本博文非本人所写,本人觉得此文讲的非常地道通俗易懂,所以摘录在此以方便以后再次查看 read函数从打开的设备或文件中读取数据 ...

  3. UNIX环境高级编程源码

    UNIX环境高级编程源码 一.下载源码 利用wget命令下载源码,源码地址http://apuebook.com/src.3e.tar.gz 可以在服务器的根目录下创建文件夹,mkdir 1.mkdi ...

  4. python flask高级编程之restful_('Python Flask高级编程之RESTFul API前后端分离精讲',),全套视频教程学习资料通过百度云网盘下载...

    资源详情 r n t某课网好评度100%的Python Flask高级编程之RESTFul API前后端分离精讲 r n t t t第1章 随便聊聊 r n t t t聊聊Flask与Django,聊 ...

  5. UINX环境高级编程笔记 第3章 文件I/O

    UNIX环境高级编程 第三章 文件I/O 3.1 引言 3.2 文件描述符 3.3 函数open和openat 3.4 函数creat 3.5 函数close 3.6 函数lseek 3.7 函数re ...

  6. 2017“编程之美”终章:AI之战勇者为王

    编者按:8月15日,第六届微软"编程之美"挑战赛在选手的火热比拼中圆满落下帷幕."编程之美"挑战赛是由微软主办,面向高校学生开展的大型编程比赛.自2012年起, ...

  7. UNIX 环境高级编程总结——第五章 标准I/O 库

    5.1 流和 FILE 对象 对于标准 I/O 库,它们的操作则是围绕流(stream)进行的. 当打开一个流时,标准 I/O 函数 fopen 返回一个指向 FILE 对象的指针. 为了引用一个流, ...

  8. 《Unix环境高级编程》Note——第一章基础知识

    文章目录 第一章 Unix基础知识 1.引言 2.Unix体系结构 3.登录 4.文件和目录 5.输入和输出 6.程序和进程 7.出错处理 8.用户标识 9.信号 10.时间值 11.系统调用和库函数 ...

  9. python flask restful入门_Python Flask高级编程之RESTFul API前后端分离精讲

    第1章 随便聊聊 聊聊Flask与Django,聊聊代码的创造性1-1 Flask VS Django 1-2 课程更新维护说明 第2章 起步与红图 本章我们初始化项目,探讨与研究Flask的默认层级 ...

  10. unix下网络编程之I/O复用(二)

    select函数 该函数允许进程指示内核等待多个事件中的任何一个发生,并仅在有一个或是多个事件发生或经历一段指定的时间后才唤醒它.我们调用select告知内核对哪些描述字(就读.写或异常条件)感兴趣以 ...

最新文章

  1. 转:中国互联网十五年的22个创新模式
  2. 这样出ORACLE的面试题
  3. 1 SE21开发包创建
  4. php截取字符串后编码不对,php截取字符串出现中文乱码问题的解决
  5. 如何在jsp页面中连接mysql数据库_如何使用JSP访问MySQL数据库
  6. 【FLink】Flink Forward Asia Hackathon (2021) 回顾
  7. ios libfdk-aac encode
  8. 模块电源(一):DC-DCLDO
  9. 利用原始套接字实现一个简单的采集网络数据包
  10. github项目地址在哪里看_拍张照片求解数独,计算机如何从图中看懂题目,这个GitHub热榜项目告诉你...
  11. 网络暴利行业,天龙私服赚千万是不是梦想?
  12. IP地址、子网掩码、网络地址之间相关的计算
  13. 描述性统计-正态性检验(SPSS,SAS)P-P图,Q-Q图,直方图,KS检验
  14. 刘禹锡最经典诗文10首,每一首都是千古名作,读懂受益一生
  15. 终端定制行业分销初步设计
  16. Java电商系统商品详情页存储方案设计
  17. DirectUI界面库
  18. 手机传感器的意义:未来生活将被彻底改变
  19. JavaWeb仿twitter个人社交网络及微博服务网站
  20. python-闰年判断

热门文章

  1. .Net Core下如何管理配置文件(转载)
  2. 读我是一只IT小小鸟有感
  3. 【Linux】X window与文本模式的切换
  4. Ubuntu 12.04下jdk的安装与配置
  5. 宋体、代码-iOS网络编程实践--NSStream实现TCP Socket iPhone客户端-by小雨
  6. 反思风险管理的五项核心风险。
  7. MySQL 基础操作
  8. Java 中与()短路与()以及 或(|)短路或(||)的关系
  9. logstash multiline
  10. CodeUI Test:UIMap录制文件分析一