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

📄 plan9-io.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <venti.h>enum {	IdealAlignment = 32,	ChunkSize 	= 128*1024,};voidvtMemFree(void *p){	if(p == 0)		return;	free(p);}void *vtMemAlloc(int size){	void *p;	p = malloc(size);	if(p == 0)		vtFatal("vtMemAlloc: out of memory");	return p;}void *vtMemAllocZ(int size){	void *p = vtMemAlloc(size);	memset(p, 0, size);	return p;}void *vtMemRealloc(void *p, int size){	if(p == nil)		return vtMemAlloc(size);	p = realloc(p, size);	if(p == 0)		vtFatal("vtRealloc: out of memory");	return p;}void *vtMemBrk(int n){	static Lock lk;	static uchar *buf;	static int nbuf;	static int nchunk;	int align, pad;	void *p;	if(n >= IdealAlignment)		align = IdealAlignment;	else if(n > 8)		align = 8;	else			align = 4;	lock(&lk);	pad = (align - (uintptr)buf) & (align-1);	if(n + pad > nbuf) {		buf = vtMemAllocZ(ChunkSize);		nbuf = ChunkSize;		pad = (align - (uintptr)buf) & (align-1);		nchunk++;	}	assert(n + pad <= nbuf);			p = buf + pad;	buf += pad + n;	nbuf -= pad + n;	unlock(&lk);	return p;}voidvtThreadSetName(char *name){	int fd;	char buf[32];	sprint(buf, "/proc/%d/args", getpid());	if((fd = open(buf, OWRITE)) >= 0){		write(fd, name, strlen(name));		close(fd);	}}intvtFdRead(int fd, uchar *buf, int n){	n = read(fd, buf, n);	if(n < 0) {		vtOSError();		return -1;	}	if(n == 0) {		vtSetError("unexpected EOF");		return 0;	}	return n;}intvtFdWrite(int fd, uchar *buf, int n){	int nn;		nn = write(fd, buf, n);	if(nn < 0) {		vtOSError();		return 0;	}	if(n != nn) {		vtSetError("truncated write");		return 0;	}	return 1;}voidvtFdClose(int fd){	close(fd);}char *vtOSError(void){	return vtSetError("%r");}

⌨️ 快捷键说明

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