第七章 进程环境
来源:互联网 发布:windows地图可以卸载吗 编辑:程序博客网 时间:2024/05/16 13:00
1. 函数atexit。
int atexit(void (*func(void))); //若成功,返回0;若出错,返回非0
exit调用这些函数的顺序与它们登记时候的顺序相反,同一函数登记多次,也会调用多次。
#include "apue.h"static void my_exit1(void);static void my_exit2(void);int main(void){if(atexit(my_exit2) != 0)err_sys("can't register my_exit2");if(atexit(my_exit1) != 0)err_sys("can't register my_exit1");if(atexit(my_exit1) != 0)err_sys("can't register my_exit1");printf("main is done\n");return 0;}static void my_exit1(void){printf("first exit handler\n");}static void my_exit2(void){printf("second exit handler\n");}/************************main is donefirst exit handlerfirst exit handlersecond exit handler***********************/
2. 环境表
extern char **environ;
3. C程序的存储空间布局
i. 正文段
ii. 初始化数据段
iii. 未初始化数据段
iX. 栈。 自动变量以及每次函数调用时所需保存的信息都存放在此段中
X. 堆。 在堆中进行动态存储分配
未初始化数据段的内容并不存放在磁盘程序文件中,因为内核在程序开始前将它们都置为0,需要放在磁盘程序文件中的段只有正文段和初始化数据段。
4. 共享库
gcc -static hello.c //阻止使用共享库
gcc hello.c //默认使用共享库
5. 存储空间分配
i. malloc,分配制定字节数的存储区。此存储区中的初始值不确定。
void *malloc(size_t size);
ii. calloc,为指定数量指定长度的对象分配存储空间。该空间中的每一位都初始化为0
void *calloc(size_t nobj, size_t size);
iii. realloc,增加或者减少以前分配区的长度。当增加长度时,可能需要将以前分配区的内容移动到一个更大的地方,新增区域内初始值不确定。
void *realloc(void *ptr, size_t newsize); //newsize是新存储区的长度,不是新存储区与旧存储区的长度差
6. 环境变量
char *getenv(const char *name); //返回跟name关联的value指针;若未找到,返回NULL
设置环境变量值
int putenv(char *str); //取形式为name=value的字符串,将其放到环境表中,若name已经存在,则先删除原来定义
int setenv(const char* name, const char* value, int rewrite); //将name设置为value,如果里面有name,当rewrite为非0,就将name先删除,然后再来定义;当rewrite为0,就不设置为新的value
int unsetenv(const char* name); //删除name的定义
修改name的处理(P170)
7. setjmp 和 longjmp函数(???)
#include "apue.h"#include <setjmp.h>#define TOK_ADD 5jmp_buf jmpbuffer;void do_line(char *);void cmd_add(void);int get_token(void);int main(void){char line[MAXLINE];if(setjmp(jmpbuffer) != 0)printf("error");while(fgets(line, MAXLINE, stdin) != NULL)do_line(line);exit(0);}char *tok_ptr;void do_line(char *ptr){int cmd;tok_ptr = ptr;while((cmd = get_token()) > 0){switch(cmd){case TOK_ADD:cmd_add();break;}}}void cmd_add(void){int token;token = get_token();if(token < 0)longjmp(jmpbuffer, 1);}int get_token(void){}
自动变量,寄存器变量,易失变量...
8. getrlimit 和 setrlimit函数,得到和设置资源限制。
- 第七章 进程环境
- 第七章 进程环境
- 第七章进程环境
- 第七章 进程环境
- 第七章 进程环境
- 读书笔记 第七章-进程环境
- [APUE]第七章 进程环境
- APUE第七章 进程环境
- APUE 第七章 进程环境
- 第七章 进程环境-进程终止
- APUE学习笔记:第七章 进程环境
- 第七章 UNIX进程的环境
- APUE 第七章 进程的运行环境
- AUPE学习第七章------进程环境
- apue第七章 进程环境 笔记
- 第七章 进程环境 命令行参数
- APUE读书笔记-第七章 进程环境
- 《APUE》笔记-第七章-进程环境
- 手把手搭建一个SpringMVC+ibatis 工程
- ButterknifeZelezny在AndroidStudio中的配置与使用方法
- 经典计算机视觉论文笔记——《Network in Network》
- PAT 1057. Stack
- TabLayout与ViewPager的使用
- 第七章 进程环境
- 亲手用Maven
- <context:component-scan>使用说明
- OpenCV的minEllipse函数(求轮廓的外接椭圆)一定要判断输入点是否大于5个
- 设计模式——策略模式
- Java学习笔记(十八):序列化
- 三消游戏中随机排列图片位置,和点击图片消失下落
- EGGN 512 Lecture-13 Hough
- HTML过滤器 - XSS Fucker 20160701