亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? disk.c

?? 這是一個同樣來自貝爾實驗室的和UNIX有著淵源的操作系統, 其簡潔的設計和實現易于我們學習和理解
?? C
字號:
#include <u.h>#include <libc.h>#include <bio.h>#include <ctype.h>#include <disk.h>static Disk*mkwidth(Disk *disk){	char buf[40];	sprint(buf, "%lld", disk->size);	disk->width = strlen(buf);	return disk;}/* * Discover the disk geometry by various sleazeful means. *  * First, if there is a partition table in sector 0, * see if all the partitions have the same end head * and sector; if so, we'll assume that that's the  * right count. *  * If that fails, we'll try looking at the geometry that the ATA * driver supplied, if any, and translate that as a * BIOS might.  *  * If that too fails, which should only happen on a SCSI * disk with no currently defined partitions, we'll try * various common (h, s) pairs used by BIOSes when faking * the geometries. */typedef struct Table  Table;typedef struct Tentry Tentry;struct Tentry {	uchar	active;			/* active flag */	uchar	starth;			/* starting head */	uchar	starts;			/* starting sector */	uchar	startc;			/* starting cylinder */	uchar	type;			/* partition type */	uchar	endh;			/* ending head */	uchar	ends;			/* ending sector */	uchar	endc;			/* ending cylinder */	uchar	xlba[4];			/* starting LBA from beginning of disc */	uchar	xsize[4];		/* size in sectors */};enum {	Toffset		= 446,		/* offset of partition table in sector */	Magic0		= 0x55,	Magic1		= 0xAA,	NTentry		= 4,};struct Table {	Tentry	entry[NTentry];	uchar	magic[2];};static intpartitiongeometry(Disk *disk){	char *rawname;	int i, h, rawfd, s;	uchar buf[512];	Table *t;	t = (Table*)(buf + Toffset);	/*	 * look for an MBR first in the /dev/sdXX/data partition, otherwise	 * attempt to fall back on the current partition.	 */	rawname = malloc(strlen(disk->prefix) + 5);	/* prefix + "data" + nul */	if(rawname == nil)		return -1;	strcpy(rawname, disk->prefix);	strcat(rawname, "data");	rawfd = open(rawname, OREAD);	free(rawname);	if(rawfd >= 0	&& seek(rawfd, 0, 0) >= 0	&& readn(rawfd, buf, 512) == 512	&& t->magic[0] == Magic0	&& t->magic[1] == Magic1) {		close(rawfd);	} else {		if(rawfd >= 0)			close(rawfd);		if(seek(disk->fd, 0, 0) < 0		|| readn(disk->fd, buf, 512) != 512		|| t->magic[0] != Magic0		|| t->magic[1] != Magic1) {			return -1;		}	}	h = s = -1;	for(i=0; i<NTentry; i++) {		if(t->entry[i].type == 0)			continue;		t->entry[i].ends &= 63;		if(h == -1) {			h = t->entry[i].endh;			s = t->entry[i].ends;		} else {			/*			 * Only accept the partition info if every			 * partition is consistent.			 */			if(h != t->entry[i].endh || s != t->entry[i].ends)				return -1;		}	}	if(h == -1)		return -1;	disk->h = h+1;	/* heads count from 0 */	disk->s = s;	/* sectors count from 1 */	disk->c = disk->secs / (disk->h*disk->s);	disk->chssrc = Gpart;	return 0;}/* * If there is ATA geometry, use it, perhaps massaged. */static intdrivergeometry(Disk *disk){	int m;	if(disk->c == 0 || disk->h == 0 || disk->s == 0)		return -1;	disk->chssrc = Gdisk;	if(disk->c < 1024)		return 0;	switch(disk->h) {	case 15:		disk->h = 255;		disk->c /= 17;		return 0;	default:		for(m = 2; m*disk->h < 256; m *= 2) {			if(disk->c/m < 1024) {				disk->c /= m;				disk->h *= m;				return 0;			}		}		/* set to 255, 63 and be done with it */		disk->h = 255;		disk->s = 63;		disk->c = disk->secs / (disk->h * disk->s);		return 0;	}}/* * There's no ATA geometry and no partitions. * Our guess is as good as anyone's. */static struct {	int h;	int s;} guess[] = {	64, 32,	64, 63,	128, 63,	255, 63,};static intguessgeometry(Disk *disk){	int i;	long c;	disk->chssrc = Gguess;	c = 1024;	for(i=0; i<nelem(guess); i++)		if(c*guess[i].h*guess[i].s >= disk->secs) {			disk->h = guess[i].h;			disk->s = guess[i].s;			disk->c = disk->secs / (disk->h * disk->s);			return 0;		}	/* use maximum values */	disk->h = 255;	disk->s = 63;	disk->c = disk->secs / (disk->h * disk->s);	return 0;}static voidfindgeometry(Disk *disk){	if(partitiongeometry(disk) < 0	&& drivergeometry(disk) < 0	&& guessgeometry(disk) < 0) {	/* can't happen */		print("we're completely confused about your disk; sorry\n");		assert(0);	}}static Disk*openfile(Disk *disk){	Dir *d;	if((d = dirfstat(disk->fd)) == nil){		free(disk);		return nil;	}	disk->secsize = 512;	disk->size = d->length;	disk->secs = disk->size / disk->secsize;	disk->offset = 0;	free(d);	findgeometry(disk);	return mkwidth(disk);}static Disk*opensd(Disk *disk){	Biobuf b;	char *p, *f[10];	int nf;	Binit(&b, disk->ctlfd, OREAD);	while(p = Brdline(&b, '\n')) {		p[Blinelen(&b)-1] = '\0';		nf = tokenize(p, f, nelem(f));		if(nf >= 3 && strcmp(f[0], "geometry") == 0) {			disk->secsize = strtoll(f[2], 0, 0);			if(nf >= 6) {				disk->c = strtol(f[3], 0, 0);				disk->h = strtol(f[4], 0, 0);				disk->s = strtol(f[5], 0, 0);			}		}		if(nf >= 4 && strcmp(f[0], "part") == 0 && strcmp(f[1], disk->part) == 0) {			disk->offset = strtoll(f[2], 0, 0);			disk->secs = strtoll(f[3], 0, 0) - disk->offset;		}	}		disk->size = disk->secs * disk->secsize;	if(disk->size <= 0) {		strcpy(disk->part, "");		disk->type = Tfile;		return openfile(disk);	}	findgeometry(disk);	return mkwidth(disk);}Disk*opendisk(char *disk, int rdonly, int noctl){	char *p, *q;	Disk *d;	d = mallocz(sizeof(*d), 1);	if(d == nil)		return nil;	d->fd = d->wfd = d->ctlfd = -1;	d->rdonly = rdonly;	d->fd = open(disk, OREAD);	if(d->fd < 0) {		werrstr("cannot open disk file");		free(d);		return nil;	}	if(rdonly == 0) {		d->wfd = open(disk, OWRITE);		if(d->wfd < 0)			d->rdonly = 1;	}	if(noctl)		return openfile(d);	p = malloc(strlen(disk) + 4);	/* 4: slop for "ctl\0" */	if(p == nil) {		close(d->wfd);		close(d->fd);		free(d);		return nil;	}	strcpy(p, disk);	/* check for floppy(3) disk */	if(strlen(p) >= 7) {		q = p+strlen(p)-7;		if(q[0] == 'f' && q[1] == 'd' && isdigit(q[2]) && strcmp(q+3, "disk") == 0) {			strcpy(q+3, "ctl");			if((d->ctlfd = open(p, ORDWR)) >= 0) {				*q = '\0';				d->prefix = p;				d->type = Tfloppy;				return openfile(d);			}		}	}	/* attempt to find sd(3) disk or partition */	if(q = strrchr(p, '/'))		q++;	else		q = p;	strcpy(q, "ctl");	if((d->ctlfd = open(p, ORDWR)) >= 0) {		*q = '\0';		d->prefix = p;		d->type = Tsd;		d->part = strdup(disk+(q-p));		if(d->part == nil){			close(d->ctlfd);			close(d->wfd);			close(d->fd);			free(p);			free(d);			return nil;		}		return opensd(d);	}	*q = '\0';	d->prefix = p;	/* assume we just have a normal file */	d->type = Tfile;	return openfile(d);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色婷婷av一区| 99久久精品国产导航| 亚洲一区在线播放| 亚洲人成亚洲人成在线观看图片| 国产精品入口麻豆原神| 精品国产乱码久久久久久闺蜜 | 国产精品不卡在线| 欧美国产日韩a欧美在线观看| 精品成人a区在线观看| www国产精品av| 日本一区二区成人| 亚洲男人的天堂网| 亚洲一区二区美女| 日韩和欧美一区二区三区| 日韩va亚洲va欧美va久久| 极品少妇xxxx精品少妇偷拍 | 国产成人av一区二区三区在线| 国产精品一区二区久激情瑜伽 | 色狠狠一区二区| 欧美色综合久久| 日韩三级免费观看| 国产午夜精品在线观看| 亚洲精品自拍动漫在线| 日韩中文字幕一区二区三区| 久久福利视频一区二区| 成人国产视频在线观看| 欧美日韩一区高清| 久久人人97超碰com| 亚洲激情在线播放| 极品少妇xxxx精品少妇| 91丨九色丨黑人外教| 3d动漫精品啪啪| 中文字幕欧美激情一区| 午夜私人影院久久久久| 国产一区二区不卡老阿姨| 色综合久久久久综合体| 久久日韩粉嫩一区二区三区| 亚洲一区成人在线| 国产999精品久久久久久| 91色综合久久久久婷婷| 精品sm在线观看| 午夜精品久久久久久久久久久| 国产成人鲁色资源国产91色综| 欧美午夜不卡在线观看免费| 国产喷白浆一区二区三区| 天堂一区二区在线| 色偷偷成人一区二区三区91 | 91美女片黄在线观看| 日韩亚洲欧美一区二区三区| 综合欧美一区二区三区| 日韩精品亚洲一区二区三区免费| 成人av免费在线播放| 欧美精品一区二区不卡| 亚洲不卡在线观看| 91在线丨porny丨国产| 久久先锋影音av鲁色资源网| 天天操天天综合网| 色婷婷综合久久久| 欧美韩日一区二区三区| 黄网站免费久久| 337p亚洲精品色噜噜狠狠| 一区二区三区欧美在线观看| 成人app网站| 欧美激情一区二区三区四区| 久久99久久久欧美国产| 欧美精品成人一区二区三区四区| 亚洲乱码日产精品bd| www.欧美精品一二区| 中文字幕成人在线观看| 国产ts人妖一区二区| 精品国产电影一区二区 | 国产亚洲一区二区三区| 麻豆91精品91久久久的内涵| 欧美区在线观看| 亚洲二区在线视频| 欧美在线制服丝袜| 亚洲中国最大av网站| 欧洲色大大久久| 亚洲第一久久影院| 欧美精品自拍偷拍| 日韩高清电影一区| 欧美一级二级三级蜜桃| 精品一区二区三区在线视频| 欧美mv日韩mv亚洲| 韩国欧美国产一区| 日本一区二区高清| 97se狠狠狠综合亚洲狠狠| 中文字幕一区二区三区不卡| 色综合久久天天综合网| 午夜久久久久久| 欧美不卡一区二区| 国产 日韩 欧美大片| 亚洲欧美成aⅴ人在线观看 | 国产一区激情在线| 国产亚洲人成网站| 在线免费观看日本欧美| 石原莉奈一区二区三区在线观看| 欧美一区二区三区爱爱| 国产自产高清不卡| 亚洲丝袜自拍清纯另类| 欧美亚洲一区二区在线| 午夜成人在线视频| 久久天天做天天爱综合色| av一区二区不卡| 五月天国产精品| 久久你懂得1024| 欧美羞羞免费网站| 韩国精品久久久| 成人免费在线视频| 日韩亚洲欧美综合| jlzzjlzz亚洲日本少妇| 天堂在线一区二区| 亚洲三级免费电影| 精品处破学生在线二十三| 99久久精品99国产精品| 精品一区二区三区蜜桃| 亚洲欧美另类小说视频| 精品国产乱码久久久久久蜜臀| 91免费看`日韩一区二区| 麻豆精品蜜桃视频网站| 亚洲乱码国产乱码精品精小说| 日韩女优制服丝袜电影| 中文字幕一区免费在线观看| 国产乱人伦精品一区二区在线观看| 99re6这里只有精品视频在线观看| 国产欧美日韩在线观看| 欧美日韩电影一区| 国产精品69毛片高清亚洲| 亚洲一区成人在线| 欧美国产综合色视频| 91精品久久久久久久99蜜桃| 91小视频免费观看| 国产精品99久久久久| 奇米影视一区二区三区| 亚洲免费看黄网站| 中文字幕在线观看一区| 国产日本欧洲亚洲| 2017欧美狠狠色| 日韩美女在线视频 | 亚洲国产裸拍裸体视频在线观看乱了| 国产视频一区二区在线观看| 日韩一二在线观看| 日韩午夜小视频| 91精品国产综合久久精品| 欧美丝袜丝nylons| 色偷偷久久人人79超碰人人澡 | 亚洲国产成人va在线观看天堂| 国产精品久久久久久亚洲伦| 久久久久久久久久久99999| 欧美一区二区三区在线观看视频| 欧美日韩久久一区| 欧美美女喷水视频| 在线成人小视频| 欧美系列亚洲系列| 欧美军同video69gay| 欧美久久一区二区| 91精品国产综合久久久久久久| 欧美日韩高清一区二区三区| 欧美日韩一区二区三区在线| 欧美色综合天天久久综合精品| 欧美在线高清视频| 欧美系列一区二区| 制服丝袜亚洲网站| 精品国产一区二区精华| 久久久久高清精品| 日本一区二区久久| 亚洲另类中文字| 日韩中文字幕亚洲一区二区va在线| 日韩专区中文字幕一区二区| 久久精品久久久精品美女| 美女免费视频一区二区| 国产成人一级电影| 色哟哟国产精品| 欧美一级黄色片| 中文在线资源观看网站视频免费不卡 | 久久精品国产**网站演员| 免费在线观看日韩欧美| 国产精品资源网| 日本电影亚洲天堂一区| 欧美一区二区三区视频在线| 2023国产精品| 亚洲激情网站免费观看| 久久国产尿小便嘘嘘| av毛片久久久久**hd| 7777精品久久久大香线蕉 | 色婷婷香蕉在线一区二区| 欧美日韩精品免费观看视频| 久久网站热最新地址| 亚洲永久免费视频| 国产一区二区毛片| 欧美体内she精高潮| 欧美国产日韩亚洲一区| 天堂蜜桃91精品| 91在线视频在线| 久久久一区二区三区捆绑**| 亚洲精品久久嫩草网站秘色| 久久99九九99精品| 久久成人久久鬼色| 精品国产不卡一区二区三区| 欧美性生交片4|