filesystem.c
上传用户:kin20054
上传日期:2022-06-28
资源大小:4k
文件大小:3k
源码类别:

操作系统开发

开发平台:

Unix_Linux

  1. #include "file.h"
  2. #define Max 10
  3. int clear_disk(const char* disk)
  4. {
  5.   read_disk(disk);
  6.   int i;
  7.   for(i = 0; i < L; i++)
  8.   {
  9.       memset(ldisk[i],0,B);
  10.   }
  11.   int temp;
  12.   for(temp = 0; temp < 4; temp++)
  13.   {
  14.     ldisk[0][temp] = 0xff;
  15.   }
  16.   for(temp = 4; temp < B; temp++)
  17.   {
  18.     ldisk[0][temp] = 0x00;
  19.   }
  20.   struct inode root_inode;
  21.   root_inode.sa[0] = 0;
  22.   root_inode.sa[1] = find_block();
  23.   fill_full(root_inode.sa[1]);
  24.   root_inode.sa[2] = -1;
  25.   root_inode.sa[3] =-1;
  26.   memcpy(ldisk[1],(char*)&root_inode,16);
  27.   save_disk(disk);
  28. }
  29. void help()
  30. {
  31.   printf("这是一个虚拟的文件系统n可以执行以下的命令n");
  32.   printf("1 help 输出帮助文档n");
  33.   printf("2 clear 清理磁盘,使得磁盘初始化n");
  34.   printf("3 create filename 创建文件名为filename的文件n");
  35.   printf("4 open filename 打开文件n");
  36.   printf("   4.1 write mem输入mem到打开文件!!!不能输入空格到文件中n");
  37.   printf("   4.2 read  num从文件中读入num个字节到buf并且输出n");
  38.   printf("   4.3 lseek pos更改读写指针到posn");
  39.   printf("   4.4 close 关闭打开的文件n");
  40.   printf("5 ls or dir 列出目录下文件n");
  41.   printf("6 delete or rm filename 删除文件n");
  42.   printf("7 quit 退出文件系统并保存n");
  43. }
  44. void test(int i1,int i2,int j1,int j2)
  45. {
  46.   int i,j;
  47.   for(i=i1;i<i2;i++)
  48.     for(j=j1;j<j2;j++)
  49.       print_bit(ldisk[i][j]);
  50. }
  51. void main(int ag,char** av)
  52. {
  53.   const char* disk;
  54.   disk = av[1];
  55.   help();
  56.   int index;
  57.   read_disk(disk);
  58.   int i;
  59.   for(i = 0; i < Max; i++)
  60.     table[i].add = -1;
  61.   int k,ll;
  62.   char mem[384];
  63.   char buf[384];
  64.   for(i = 0; i < 384; i++)
  65.   {
  66.     mem[i] = 'a';
  67.     buf[i] = 0;
  68.   }
  69.   char command[8];
  70.   while(1)
  71.   {
  72.     printf("wsc>>");
  73.     scanf("%s",command);
  74.     if(strcmp(command,"help") == 0)
  75.     {
  76.       help();
  77.       continue;
  78.     }
  79.     if(strcmp(command,"clear") == 0)
  80.     {
  81.       clear_disk(disk);
  82.       continue;
  83.     }
  84.     if(strcmp(command,"create") == 0)
  85.     {
  86.       char name[4];
  87.       scanf("%s",name);
  88.       create(name);
  89.       continue;
  90.     }
  91.     if(strcmp(command,"delete") == 0||strcmp(command,"rm") == 0)
  92.     {
  93.       char name[4];
  94.       scanf("%s",name);
  95.       destroy(name);
  96.       continue;
  97.     }
  98.     if(strcmp(command,"open") == 0)
  99.     {
  100.       char name[4];
  101.       scanf("%s",name);
  102.       k = open(name);
  103.       scanf("%s",command);
  104.       while(strcmp(command,"close") != 0)
  105.       {
  106. if(strcmp(command,"write") == 0)
  107. {
  108.   printf("n");
  109.   //gets(mem);
  110.   scanf("%s",mem);
  111.   ll=write(k,mem,strlen(mem));
  112.   if(ll != 0)
  113.   {
  114.     printf(" 写入文件错误");
  115.   }
  116. }
  117. if(strcmp(command,"read") == 0)
  118. {
  119.   int num_buf;
  120.   scanf("%d",&num_buf);
  121.   read(k,buf,num_buf);
  122.   printf("%sn",buf);
  123.   memset(buf,0,num_buf);
  124. }
  125. if(strcmp(command,"lseek") == 0)
  126. {
  127.   int pos;
  128.   scanf("%d",&pos);
  129.   lseek(k,pos);
  130. }
  131. scanf("%s",command);
  132.       }
  133.       close(k);
  134.       continue;
  135.      }
  136.     if(strcmp(command,"dir") == 0||strcmp(command,"ls") == 0)
  137.     {
  138.       directory();
  139.       continue;
  140.     }
  141.     if(strcmp(command,"quit") == 0)
  142.     {
  143.       printf("quit this filesystem!n");
  144.       break;
  145.     }
  146.   }
  147.   save_disk(disk);
  148. }