一: 进程终止
/*********************************************************
退出函数:
包含头文件: #include <stdlib.h>
函数原型: void exit(int status);
void _Exit(int status);
包含头文件: #include <unistd.h>
函数原型: void _exit(int status);
函数说明: 用于正常终止程序,_exit和_Exit立即进入内核,exit则先执行一些清理处理,然后返回内核
***********************************************************/
/***********************************************************
包含头文件: #include <stdlib.h>
函数原型: int atexit(void (*func)(void));
函数说明: 用于注册终止处理程序
注: exit调用终止处理程序顺序与注册顺序相反,同一函数登记多次,也会被调用多次
返回值:若成功,返回0,若出错,返回非0
***********************************************************/
vi 7.1.c
#include <stdlib.h>
#include <stdio.h>
// 终止程序假设执行 clean gather erase等操作
void clean()
{
printf("程序已经终止,请让我来清理垃圾吧!\n");
}
void gather()
{
printf("垃圾清理完毕,让我来收集打包垃圾吧!\n");
}
void erase()
{
printf("垃圾打包完毕,让我来移除垃圾吧!\n");
}
int main()
{
if (atexit(erase))
{
printf("register remove Failed\n");
return 0;
}
if (atexit(gather))
{
printf("register gather Failed\n");
exit(0);
}
if (atexit(clean))
{
printf("register clean Failed\n");
exit(0);
}
return 0;
}
/*****************************************************
存储空间分配:
包含头文件: #include <stdlib.h>
函数原型: void *malloc(size_t size);
void *calloc(size_t nobj,size_t size);
void *realloc(void *obj,size_t size);
函数说明: (1) malloc: 分配size个字节的空间
(2) calloc: 给指定长度对象分配空间,每个bit初始化为0
(3) realloc : 分配size个字节的空间,并将obj移入分配空间内
返回值: 若成功,返回指针,若失败,返回NULL
void free(void* ptr)
函数说明: 释放ptr指向的空间
********************************************************/
/*********************************************************
环境表:
每个程序都可以得到环境变量,进程接受到环境表,环境表是一个字符指针数组,Unix系统提供了全局变量
char ** environ 指向该指针数组
************************************************************/
/**************************************************************
包含头文件: #include <stdlib.h>
函数原型: char* getenv(const char* name);
函数说明: 得到环境变量name对应的value
返回值: 若找到,返回value的字符指针,若无,返回NULL
**********************************************************/
/*********************************************************
包含头文件: #include <stdlib.h>
函数原型: int putenv(char *str);
函数说明: 取形式为name = value的字符串,将其放到环境表,如果name已存在,则先删除其原来的定义
返回值: 若成功,返回0,若出错,返回非0
**********************************************************/
/********************************************************
包含头文件: #include <stdlib.h>
函数原型: int setenv(const char* name,const char* value,int rewrite);
函数说明: 增加或修改环境变量 name = value(若
rewrite非0,则删除其现有的定义;若rewrite为0,则不删除其现有定义(name 不设置为value,而且也不会出错)
返回值: 若成功,返回0,若失败,返回-1
***********************************************************/
/****************************************************
包含头文件: #include <stdlib.h>
函数原型: int unsetenv(const char* name);
函数说明: 删除环境变量name的定义,即使name不存在也不会出错
返回值: 若成功,返回-1
**********************************************/
vi 7.2.c
#include <stdio.h>
#include <stdlib.h>
int main()
{
char* start_dir;
if ((start_dir = getenv("HOME")) == NULL)
{
printf("getenv error\n");
exit(0);
}
printf("home起始目录: %s\n",start_dir);
return 0;
}
vi 7.3.c
include <stdio.h>
#include <stdlib.h>
int main()
{
char* envname = "Marco";
char* envvalue = "帅哥";
if (setenv(envname,envvalue,1) < 0)
{
printf("setenv error\n");
exit(0);
}
char* exist;
if ((exist = getenv(envname)) == NULL)
{
printf("环境变量不存在\n");
exit(0);
}
printf("环境变量Marco值是: %s\n",envvalue);
if (unsetenv(envname) < 0)
{
printf("删除Marco环境变量失败\n");
exit(0);
}
else
printf("删除Marco环境变量成功\n");
return 0;
}
/***************************************************
包含头文件: #include
#include <setjmp.h>
#include <stdio.h>
#include <stdlib.h>
#define IN_JMP 1
#define HANDLE_JMP 2
#define OUT_JMP 3
int in_error = 1;
int handle_error = 1;
int out_error = 1;
jmp_buf jmp;
// 假设程序步骤为 进入(in) 处理(handle) 出去(out)
void In()
{
if (in_error)
{
longjmp(jmp,IN_JMP);
}
printf("In 完成\n");
}
void Handle()
{
if (handle_error)
{
longjmp(jmp,HANDLE_JMP);
}
printf("Handle 完成\n");
}
void Out()
{
if (out_error)
{
longjmp(jmp,OUT_JMP);
}
printf("Out 完成\n");
}
int main()
{
if (setjmp(jmp) == IN_JMP)
{
printf("进入出错\n");
in_error = 0;
}
In();
if (setjmp(jmp) == HANDLE_JMP)
{
printf("处理错误\n");
handle_error = 0;
}
Handle();
if (setjmp(jmp) == OUT_JMP)
{
printf("出去错误\n");
out_error = 0;
}
Out();
return 0;
}
/*********************************************************
包含头文件: #include <sys/resource.h>
函数原型: int getrlimit(int resource,struct rlimit *rlptr);
int setrlimit(int resource,struct rlimit *rlptr);
参数说明: int resource:由系统定义的一些资源限制种类
struct rlimit: struct rlimit
{
rlim_t rlim_cur; //软限制值: 当前限制值
rlim_t rlim_max; //硬限制值: 软限制值的最大值
}
函数说明: 得到或设置 软限制值和硬限制值
*********************************************************/