[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 表示该条目无限制