unix高级环境编程学习笔记第七章(未完)
博客地址:http://www.cnblogs.com/zengjianrong/p/3222081.html
7.1 引言
Main函数调用;命令行参数;存储器布局;如何分配存储器;进程使用env;进程终止方式;longjmp、setjmp;进程资源限制。
7.2 main函数
内核执行c程序(exec函数)→调用启动例程(exit(main))→被可执行程序文件指定为程序的起始地址→调用main
C编辑器(cc)→调用连接编辑器→设置启动例程为程序的起始地址
7.3 进程终止(8种)
- Normal termination
(1) 从main返回;
(2) 调用exit;
(3) 调用_exit或_Exit;
(4) 最后一个线程从其启动例程返回(11.5);
(5) 最后一个线程调用pthread_exit(11.5))
- abnormal termination
(1) 调用abort(10.17);
(2) 接到信号并终止(10.2);
(3) 最后一个线程对取消请求做出响应(11.5、12.7))
- exit函数
(1) stdlib.h:void exit(int status);void _Exit(int status);
(2) unistd.h:void _exit(int status);
- exit(0)==returned(0),尽量使用returned(0)。
- exit handler:int atexit(void (*func)(void));调用顺序与登记顺序相反。
7.4 命令行参数
int main(int argc, char *argv[]);argv[argc]==NULL
7.5 env list
extern char **environ;getenv();putenv()。
7.6 c程序存储空间布局
从上倒下,地址由高到低。可通过size命令查看。
|
高地址:命令行参数、环境变量(从0xC0000000开始往上存) |
|
栈:自动变量、函数调用所需信息(从0xC0000000开始往下存) |
|
很大的虚地址空间….. |
|
堆:动态存储分配 |
|
bss(block started by symbol)未初始化数据段(由exec初始化为0或空指针) |
|
Data初始化数据段(由exec从程序文件中读入) |
|
低地址:text正文段(由exec从程序文件中读入),可共享、常常是read-only(从0x08048000开始往上存) |
7.7 共享库
gcc、ld命令,加-static:阻止动态链接到共享库
7.8 存储器分配
- stdlib.h
(1) void *malloc(size_t size);初始值不确定;
(2) void *calloc(size_t nobj, size_t size);初始化为0;
(3) void *realloc(void *ptr, size_t newsize);
(4) void free(void *ptr);释放的空间一般保持在malloc池,不返回给内核
- 分配的空间=请求的空间+额外的空间(记录管理信息)
- 注意:不可越界读写,忘记free,造成泄漏(有些系统有附加检错)
- 对比malloc、alloca
(1) malloc:在堆中分配空间
(2) alloca:在当前函数栈帧上分配空间(good:函数返回时自动释放;bad:某些系统函数调用后栈帧不能增加,支持不了alloca)
7.9 环境变量
1. stdlib.h
(1)char *getenv(const char *name);
(2)int putenv(char *str);
(3)int setenv(const char *name, const char *value, int rewrite);
(4)int unsetenv(const char *name);
2. 注意:只能影响到当前进程及其调用的子进程的环境变量
3. 对比:putenv(用栈存储,易出错);setenv(需分配存储区)
4. 修改env变量
7.10 setjmp、longjmp
深层嵌套的出错处理
未完,待续。。。。。。。。。。
unix高级环境编程学习笔记第七章(未完)的更多相关文章
- UNIX高级环境编程学习
1-5实例 控制字符:ctrl + 另一个键.control + D或者^D是默认的文件结束符(EOF字符).
- UNIX高级环境编程1
UNIX高级环境编程1 故宫角楼是很多摄影爱好者常去的地方,夕阳余辉下的故宫角楼平静而安详. 首先,了解一下进程的基本概念,进程在内存中布局和内容. 此外,还需要知道运行时是如何为动态数据结构(如链表 ...
- JVM学习笔记-第七章-虚拟机类加载机制
JVM学习笔记-第七章-虚拟机类加载机制 7.1 概述 Java虚拟机描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被 ...
- UNIX高级环境编程(14)文件IO - O_DIRECT和O_SYNC详解 < 海棠花溪 >
春天来了,除了工作学习,大家也要注意锻炼身体,多出去运动运动. 上周末在元大都遗址公园海棠花溪拍的海棠花. 进入正题. O_DIRECT和O_SYNC是系统调用open的flag参数.通过指定o ...
- [Python学习笔记][第七章Python文件操作]
2016/1/30学习内容 第七章 Python文件操作 文本文件 文本文件存储的是常规字符串,通常每行以换行符'\n'结尾. 二进制文件 二进制文件把对象内容以字节串(bytes)进行存储,无法用笔 ...
- Unix高级环境编程
[07] Unix进程环境==================================1. 进程终止 atexit()函数注册终止处理程序. exit()或return语句: ...
- JavaScript高级编程学习笔记(第三章之一)
继续记笔记,JavaScript越来越有意思了. 继续... 第三章:JavaScript基础 ECMAScript语法在很大程度上借鉴了C和其它类似于C的语言,比如Java和Perl. 大小写敏感: ...
- o'Reill的SVG精髓(第二版)学习笔记——第七章
第七章:路径 所有描述轮廓的数据都放在<path>元素的d属性中(d是data的缩写).路径数据包括单个字符的命令,比如M表示moveto,L表示lineto.接着是该命令的坐标信息. 7 ...
- UNIX环境编程学习笔记(26)——多线程编程(一):创建和终止线程
lienhua342014-11-08 在进程控制三部曲中我们学习了进程的创建.终止以及获取终止状态等的进程控制原语.线程的控制与进程的控制有相似之处,在表 1中我们列出了进程和线程相对应的控制原语. ...
随机推荐
- YII 项目部署时, 显示空白内容
本地开发完成,想部署到服务器上,选用了GIT来在服务器上获取上传的本地项目,结果clone后,访问网址后,YII就是个空白页,啥信息也没有,无语.. 刚开始以为是权限问题,后来给访问的目录加了777, ...
- 浅谈cookie 和 session
一. cookie 定义:保存在浏览器本地上的一组组键值对 特点: 由服务器让浏览器进行设置的 浏览器保存在浏览器本地 下次访问时自动携带 应用: 登录 保存浏览习惯 简单的投票 使用cookie的原 ...
- matlab 基础语法
计算次幂 Trial>> 3 ^ 2 % 3 raised to the power of 2 ans = 9 MATLAB 计算正弦值 Trial>> sin(pi /2) ...
- RV32I基础整数指令集
RV32I是32位基础整数指令集,它支持32位寻址空间,支持字节地址访问,仅支持小端格式(little-endian,高地址高位,低地址地位),寄存器也是32位整数寄存器.RV32I指令集的目的是尽量 ...
- [20190505]ts 命令在哪里.txt
[20190505]ts 命令在哪里.txt --//在论坛问一下ts命令在哪里?没人解答,自己也google看了一下:https://unix.stackexchange.com/questions ...
- 数字,字符串,time模块,文本进度条
数字和字符串 数字类型 整形 整数, 1/2/3/12/2019 整形用来描述什么, 身高/年龄/体重 age = 18 height = 180 浮点型 浮点数,小数 salary = 10 pri ...
- Constructing Roads POJ - 2421
题目链接:https://vjudge.net/problem/POJ-2421 思路:一些村庄,建一些路,使得所有村庄能相连,而且使得所有路长度之和最短. 题目说了,有些村庄之间已经建了路,说明有些 ...
- 201871010108-高文利《面向对象程序设计(java)》第十三周学习总结
项目 内容 这个作业属于哪个课程 <任课教师博客主页链接> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址> ht ...
- 03-人脸识别-基于MTCNN,显示5个人脸特征
import tensorflow as tf import numpy as np import cv2 import detect_face import matplotlib.pyplot as ...
- python27期day14:有参装饰器、多个装饰器装饰一个函数、递归、作业题
1.有参装饰器:给装饰器添加一个参数.来控制装饰器的行为. @auth(参数) auth里层的函数名 = auth(参数) 被装饰的函数名 = auth里层的函数名(被装饰的函数名) 被装饰的函数名( ...