Пример #1
0
int main(int argc, char *argv[])
{
	FILE *fp; int i, j; 
	char buf[1024 * BLKSZ_1K];
	int blksz = BLKSZ_1K;
	u32 *index; u8 *rb, *blk_end;
	int rlen, nlen; char *name;

	if(argc != 2) 
		err_usr("wrong command\n");

	fp = fopen(argv[1], "r");
	if(fp == NULL) 
		err_sys("fail to fopen");
	fread(buf, sizeof(char), 1024 * BLKSZ_1K, fp);

	// 获取根目录inode管理结构中的index数组
	index = root_index(buf, BLKSZ_1K);
	for(i = 0; i < 12; i++){
		if(!index[i])
			continue;
		//求index[i]号的盘块的地址
		rb = (u8 *)blk_to_addr(buf, BLKSZ_1K, index[i]);
		blk_end = rb + BLKSZ_1K; //此块的末地址
		while(rb < blk_end){
			rlen = *((u16 *)(rb + 4));//根据存放根目录内容的盘块的地址,偏移到存放此条目录项长度的地址,并取出此目录项的长度.
			nlen = *((u8 *)(rb + 6));//求目录项中文件名的长度.
			name = (u8 *)(rb + 8);//求文件名首地址.
			
			for(j = 0; j < nlen; j++)
				putchar(name[j]);
			putchar('\n');
			rb += rlen;
		}
	}

	fclose(fp);

	return 0;
}
Пример #2
0
int main(int argc, char *argv[])
{
	FILE *fp; int i, j; 
	char buf[1024 * BLKSZ_1K];
	int blksz = BLKSZ_1K;
	u32 *index; u8 *rb, *blk_end;
	int rlen, nlen; char *name;

	if(argc != 2) 
		err_usr("wrong command\n");

	fp = fopen(argv[1], "r");
	if(fp == NULL) 
		err_sys("fail to fopen");
	fread(buf, sizeof(char), 1024 * BLKSZ_1K, fp);

	index = root_index(buf, BLKSZ_1K);
	for(i = 0; i < 12; i++){
		if(!index[i])
			continue;
		rb = (u8 *)blk_to_addr(buf, BLKSZ_1K, index[i]);
		blk_end = rb + BLKSZ_1K;
		while(rb < blk_end){
			rlen = *((u16 *)(rb + 4));
			nlen = *((u8 *)(rb + 6));
			name = (u8 *)(rb + 8);
			
			for(j = 0; j < nlen; j++)
				putchar(name[j]);
			putchar('\n');
			rb += rlen;
		}
	}

	fclose(fp);

	return 0;
}