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

📄 bootcache.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <../boot/boot.h>uchar statbuf[Statsz];intcache(int fd){	int argc, i, p[2];	char *argv[5], bd[32], buf[256], partition[64], *pp;	if(stat("/boot/cfs", statbuf, sizeof statbuf) < 0)		return fd;	*partition = 0;	readfile("#e/cfs", buf, sizeof(buf));	if(*buf){		argc = tokenize(buf, argv, 4);		for(i = 0; i < argc; i++){			if(strcmp(argv[i], "off") == 0)				return fd;			else if(stat(argv[i], statbuf, sizeof statbuf) >= 0){				strncpy(partition, argv[i], sizeof(partition)-1);				partition[sizeof(partition)-1] = 0;			}		}	}	if(*partition == 0){		readfile("#e/bootdisk", bd, sizeof(bd));		if(*bd){			if(pp = strchr(bd, ':'))				*pp = 0;			/* damned artificial intelligence */			i = strlen(bd);			if(strcmp("disk", &bd[i-4]) == 0)				bd[i-4] = 0;			else if(strcmp("fs", &bd[i-2]) == 0)				bd[i-2] = 0;			else if(strcmp("fossil", &bd[i-6]) == 0)				bd[i-6] = 0;			sprint(partition, "%scache", bd);			if(stat(partition, statbuf, sizeof statbuf) < 0)				*bd = 0;		}		if(*bd == 0){			sprint(partition, "%scache", bootdisk);			if(stat(partition, statbuf, sizeof statbuf) < 0)				return fd;		}	}	print("cfs...");	if(pipe(p)<0)		fatal("pipe");	switch(fork()){	case -1:		fatal("fork");	case 0:		close(p[1]);		dup(fd, 0);		close(fd);		dup(p[0], 1);		close(p[0]);		if(fflag)			execl("/boot/cfs", "bootcfs", "-rs", "-f", partition, 0);		else			execl("/boot/cfs", "bootcfs", "-s", "-f", partition, 0);		break;	default:		close(p[0]);		close(fd);		fd = p[1];		break;	}	return fd;}

⌨️ 快捷键说明

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