[07]APUE:进程环境
[a] exit / _Exit / _exit
#include <stdlib.h>
void exit(int status)
void _Exit(int status)
#include <unistd.h>
void _exit(int status)
- exit 在终止进程之前会调用 fflush 及 fclose
- 类 UNIX 平台上,_Exit 与 _exit 相同,直接终止进程而不做清理工作
[b] atexit
#include <stdlib.h>
int atexit(void (*func) (void)) //成功返回0,出错返回非 0
- 进程正常终止前执行的函数,无返回值无参数,执行順序与声明順序相反
[c] malloc / calloc/ realloc /free
#include <stdlib.h>
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)
- malloc 在 FreeBSD 中的实现为 jemalloc
- calloc 分配的空间大小为 nobj × size,分配的空间会初始化为 0
- realloc 中 newsize 指重新分配的最终空间大小,不是新、旧存储区长度之差,第一个参数若指定为 NULL,则与 malloc 功能相同
[d] getenv
#include <stdlib.h>
char *getenv(const char *name) //成功匹配返回字符串指针,否则返回 NULL
- 获取指定环境变量的值
- 若要查看所有环境变量,需要使用全局变量 extern char **environ
[e] setenv / unsetenv
#include <stdlib.h>
int setenv(const char *name, const char *value, int rewrite)
int unsetenv(const char *name)
//成功返回 0,出错返回 -1
- 用于设置环境变量,若 rewrite 为 0,则不更新现有定义,若为非 0,则覆盖现有定义
- 仅作用于进程及其子进程环境,不影响 shell 环境
[f] setjmp / longjmp
#include <setjmp.h>
int setjmp(jmp_buf env) //若直接调用,返回 0,若从 longjmp 返回,则为非 0
void longjmp(jmp_buf env, int val)
- 用于跨函数跳转,goto 用于函数内跳转
- jmp_buf 类型的变量 env 用于保存调用 setjmp 时的环境信息,由 setjmp 写入,longjmp 使用,val 用于指定从longjmp 跳转时,setjmp 的返回值
- 若要保证跳转之后各变量恢复至初始状态,需要使用 volatile 关键字修饰变量,以免受编译器优化影响
[g] getrlimit / setrlimit
#include <sys/resource.h>
int getrlimit(int resource, struct rlimit *rlim)
int setrlimit(int resource, const struct rlimit *rlim)
//成功返回 0,出错返回非 0
struct rlimit {
rlim_t rlim_cur; //软限制
rlim_t rlim_max; //硬限制
}
- resource 的常用取值:
- RLIMIT_FSIZE:进程可以创建的文件的最大字节长序
- RLIMIT_NOFILE:进程能打开的文件数量上限
- RLIMIT_STACK:栈的最大字节长度
- RLIMIT_NICE:nice 的最大值
- 常量 RLIM_INFINITY 表示该条目无限制
[07]APUE:进程环境的更多相关文章
- [APUE] 进程环境
APUE 一书的第七章学习笔记. 进程终止 有 8 种方式可以使得进程终止,5 种为正常方式: Return from main Calling exit() Calling _exit or _Ex ...
- (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- 《UNIX环境高级编程》(APUE) 笔记第七章 - 进程环境
7 - 进程环境 Github 地址 1. main 函数 C 程序总是从 main 函数 开始执行: int main(int argc, char *argv[]); \(argc\) 为命令行参 ...
- Unix编程第7章 进程环境
准备雄心勃勃的看完APUE,但是总感觉看着看着就像进入一本字典,很多地方都是介绍函数的用法的,但是给出例子远不及函数介绍的多.而且这本书还是个大部头呢.第7章的讲的进程环境,进程是程序设计中一个比较重 ...
- Linux进程环境
Linux下C程序都是main开始的,main函数的原型是: int main(int argc, char **argv) 其中argc是命令行参数的数目,argc是指向参数的各个指针所构成的数组. ...
- Unix环境高级编程(五)进程环境
本章主要介绍了Unix进程环境,包含main函数是如何被调用的,命令行参数如何传递,存储方式布局,分配存储空间,环境变量,进程终止方法,全局跳转longjmp和setjmp函数及进程的资源限制. ma ...
- linux_api之进程环境
本篇索引: 1.引言 2.main函数 3.进程的终止方式 4.exit和_exit函数 5.atexit函数 7.环境表 8.C程序程序空间布局 9.存储空间的手动分配 10.库文件 1.引言 一个 ...
- Linux/UNIX之进程环境
进程环境 进程终止 有8种方式使进程终止,当中5中为正常终止,它们是 1) 从main返回 2) 调用exit 3) 调用_exit或_Exit 4) 最后一个 ...
- APUE(7)---进程环境
一.main函数 C程序总是从main函数开始执行.main函数的原型是: int main(int argv, char *argv[]); 当内核执行C程序时,在调用main前先调用一个特殊的启动 ...
随机推荐
- disconf系列【2】——解决zk部署情况为空的问题
如下图所示,在安装完成之后,发现zk(zookeeper)部署情况为空. 注:承接上篇,环境未发生改变. 1.解决zk没有启动的问题 查看disconf日志,发现zk没有启动. 实际情况是:zk已经启 ...
- 通过innobackupex实现对MySQL的完整备份与还原
备份 新建一个用于存放备份的目录 mkdir /backup 执行以下命令: innobackupex --password=test /backup/ 执行完后你会看到“completed OK!” ...
- C# 标准差计算
if (numberList.Any()) { exEntity.MinValue = numberList.First().NumberValue.ToString(); exEntity.MaxV ...
- java中 DigestUtils.md5Hex 的c#实现
C# string target= "央行降息影响楼市:100万20年期房贷月供减少141元"; string result = Md5Helper.Md5Hex(aa); //r ...
- OO.A.D.P
OO/A/D/P 对象和类 三大特征 对象: 对象是面向对象语言的一个极为重要的特点,所有的面向对象语言都有对象的共性. 1. 职责(单一) 2. 属性(数据.可改变的) 3. 函数(行为.方法.业务 ...
- 循序渐进Python3(十一) --2-- web之javascript
JavaScrip JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之后 ...
- Tomcat启动时项目重复加载,导致资源初始化两次的问题
http://blog.csdn.net/testcs_dn/article/details/38855641
- 何为babel / gulp
Babel主要用来将新版本的javascript(ES6,ES7)编译为ES5,目前它对于新标准的支持程度甚至高于Chrome浏览器.通过引入预设babel-preset-react,babel还能解 ...
- 日常维护sql
修复mysqlcheck -u -p --repair pmdb prefix="/export/data/mysql/bin/mysql -u -p -e" domain=机房 ...
- flash中字体兼容性
非谷歌浏览器设置字体font时需设置为该字体的(英文名字)或者(中文名字+可读性消除锯齿), 谷歌浏览器设置字体font时需设置为该字体的(中文名字) 总结:静态文本一般通过选择可读性消除锯齿来能实现 ...