⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atexit.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#define	NEXIT	33typedef struct Onex Onex;struct Onex{	void	(*f)(void);	int	pid;};static Lock onexlock;Onex onex[NEXIT];atexit(void (*f)(void)){	int i;	lock(&onexlock);	for(i=0; i<NEXIT; i++)		if(onex[i].f == 0) {			onex[i].pid = getpid();			onex[i].f = f;			unlock(&onexlock);			return 1;		}	unlock(&onexlock);	return 0;}voidatexitdont(void (*f)(void)){	int i, pid;	pid = getpid();	for(i=0; i<NEXIT; i++)		if(onex[i].f == f && onex[i].pid == pid)			onex[i].f = 0;}#pragma profile offvoidexits(char *s){	int i, pid;	void (*f)(void);	pid = getpid();	for(i = NEXIT-1; i >= 0; i--)		if((f = onex[i].f) && pid == onex[i].pid) {			onex[i].f = 0;			(*f)();		}	_exits(s);}#pragma profile on

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -