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

📄 write.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <bio.h>#include "snap.h"char *pfile[Npfile] = {	[Psegment]	"segment",	[Pfd]			"fd",	[Pfpregs]		"fpregs",	[Pnoteid]		"noteid",	[Pkregs]		"kregs",	[Pns]			"ns",	[Pproc]		"proc",	[Pregs]		"regs",	[Pstatus]		"status",};static voidwriteseg(Biobuf *b, Proc *proc, Seg *s){	int i, npg;	Page **pp, *p;	int type;	if(s == nil){		Bprint(b, "%-11ud %-11ud ", 0, 0);		return;	}	type = proc->text ==  s ? 't' : 'm';	npg = (s->len+Pagesize-1)/Pagesize;	if(npg != s->npg)		abort();	Bprint(b, "%-11llud %-11llud ", s->offset, s->len);	if(s->len == 0)		return;	for(i=0, pp=s->pg, p=*pp; i<npg; i++, pp++, p=*pp) {		if(p->written) {			if(p->type == 'z') {				Bprint(b, "z");				continue;			}			Bprint(b, "%c%-11ld %-11llud ", p->type, p->pid, p->offset);		} else {			Bprint(b, "r");			Bwrite(b, p->data, p->len);			if(p->len != Pagesize && i != npg-1)				abort();			p->written = 1;			p->type = type;			p->offset = s->offset + i*Pagesize;			p->pid = proc->pid;		}	}}voidwritesnap(Biobuf *b, Proc *p){	int i, n;	Data *d;	for(i=0; i<Npfile; i++)		if(d = p->d[i]) {			Bprint(b, "%-11ld %s\n%-11lud ", p->pid, pfile[i], d->len);			Bwrite(b, d->data, d->len);		}	if(p->text) {		Bprint(b, "%-11ld text\n", p->pid);		writeseg(b, p, p->text);	}	if(n = p->nseg) {		Bprint(b, "%-11ld mem\n%-11d ", p->pid, n);		for(i=0; i<n; i++)			writeseg(b, p, p->seg[i]);	}}

⌨️ 快捷键说明

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