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

📄 taskimpl.h

📁 P2P模拟器
💻 H
字号:
/* Copyright (c) 2005 Russ Cox, MIT; see COPYRIGHT */#include <errno.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <assert.h>#include <sys/time.h>#include <sys/types.h>#include <sys/wait.h>#include <sched.h>#include <signal.h>#include <ucontext.h>#include <sys/utsname.h>#include "task.h"#define nil ((void*)0)#define nelem(x) (sizeof(x)/sizeof((x)[0]))#define ulong task_ulong#define uint task_uint#define uchar task_uchar#define ushort task_ushort#define uvlong task_uvlong#define vlong task_vlongtypedef unsigned long ulong;typedef unsigned int uint;typedef unsigned char uchar;typedef unsigned short ushort;typedef unsigned long long uvlong;typedef long long vlong;#define print task_print#define fprint task_fprint#define snprint task_snprint#define seprint task_seprint#define vprint task_vprint#define vfprint task_vfprint#define vsnprint task_vsnprint#define vseprint task_vseprint#define strecpy task_strecpyint print(char*, ...);int fprint(int, char*, ...);char *snprint(char*, uint, char*, ...);char *seprint(char*, char*, char*, ...);int vprint(char*, va_list);int vfprint(int, char*, va_list);char *vsnprint(char*, uint, char*, va_list);char *vseprint(char*, char*, char*, va_list);char *strecpy(char*, char*, char*);#if defined(__FreeBSD__) && __FreeBSD_version < 500000extern	int		getcontext(ucontext_t*);extern	void		setcontext(ucontext_t*);extern	int		swapcontext(ucontext_t*, ucontext_t*);extern	void		makecontext(ucontext_t*, void(*)(), int, ...);#endif#if defined(__APPLE__)#	define mcontext libthread_mcontext#	define mcontext_t libthread_mcontext_t#	define ucontext libthread_ucontext#	define ucontext_t libthread_ucontext_t	typedef struct mcontext mcontext_t;	typedef struct ucontext ucontext_t;	struct mcontext	{		ulong	pc;		/* lr */		ulong	cr;		/* mfcr */		ulong	ctr;		/* mfcr */		ulong	xer;		/* mfcr */		ulong	sp;		/* callee saved: r1 */		ulong	toc;		/* callee saved: r2 */		ulong	r3;		/* first arg to function, return register: r3 */		ulong	gpr[19];	/* callee saved: r13-r31 */	// XXX: currently do not save vector registers or floating-point state	//	ulong	pad;	//	uvlong	fpr[18];	/* callee saved: f14-f31 */	//	ulong	vr[4*12];	/* callee saved: v20-v31, 256-bits each */	};		struct ucontext	{		struct {			void *ss_sp;			uint ss_size;		} uc_stack;		sigset_t uc_sigmask;		mcontext_t mc;	};		void makecontext(ucontext_t*, void(*)(void), int, ...);	int getcontext(ucontext_t*);	int setcontext(ucontext_t*);	int swapcontext(ucontext_t*, ucontext_t*);	int _getmcontext(mcontext_t*);	void _setmcontext(mcontext_t*);	#endiftypedef struct Context Context;enum{	STACK = 8192};struct Context{	ucontext_t	uc;};struct Task{	Task	*next;	Task	*prev;	Task	*allnext;	Task	*allprev;	Context	context;	uint	id;	uchar	*stk;	uint	stksize;	int		exiting;	void	(*startfn)(void*);	void	*startarg;	char	name[256];	char	state[256];	void *udata;};void	taskready(Task*);void	taskswitch(void);extern Task *taskrunning;

⌨️ 快捷键说明

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