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

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

?? filesys.c

?? 操作系統的一些有用的題目
?? C
字號:
/* here we only deal with 8 byte file name length */#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <string.h>#include <ctype.h>#include "filesys.h"#define DEBUG#define RevByte(low,high) ((high) << 8 | (low))#define RevWord(lowest,lower,higher,highest) ((highest) << 24 | (higher) << 16 | (lower) << 8 | lowest)struct BootDescriptor_t bdptor;struct Entry *curdir = NULL;int fd;unsigned char fatbuf[0x1200];void ScanBootSector(){  unsigned char buf[SECTOR_SIZE];	 /* Attention to type  */  int ret,i;  if ((ret = read(fd,buf,SECTOR_SIZE)) < 0)    perror("read boot sector failed");    for (i = 0; i <= 10; i++)    bdptor.Oem_name[i] = buf[i+0x03];  bdptor.Oem_name[i] = '\0';  bdptor.BytesPerSector   = RevByte(buf[0x0b],buf[0x0c]);  bdptor.SectorsPerCluster= buf[0x0d];  bdptor.ReservedSectors  = RevByte(buf[0x0e],buf[0x0f]);  bdptor.FATs             = buf[0x10];  bdptor.RootDirEntries   = RevByte(buf[0x11],buf[0x12]);  bdptor.LogicSectors     = RevByte(buf[0x13],buf[0x14]);  bdptor.MediaType        = buf[0x15];  bdptor.SectorsPerFAT    = RevByte(buf[0x16],buf[0x17]);  bdptor.SectorsPerTrack  = RevByte(buf[0x18],buf[0x19]);  bdptor.Heads            = RevByte(buf[0x1a],buf[0x1b]);  bdptor.HiddenSectors    = RevByte(buf[0x1c],buf[0x1d]);#ifdef DEBUG  printf("Oem_name \t\t%s\n"	 "BytesPerSecotr \t\t%d\n"	 "SectorsPerCluster \t%d\n"	 "ReservedSectors \t%d\n"	 "FATs \t\t\t%d\n"	 "RootDirEntries \t\t%d\n"	 "LogicSectors \t\t%d\n"	 "MediaType \t\t%x\n"	 "SectorsPerFAT \t\t%d\n"	 "SectorsPerTrack \t%d\n"	 "Heads \t\t\t%d\n"	 "HiddenSectors \t\t%d\n",	 bdptor.Oem_name,	 bdptor.BytesPerSector,	 bdptor.SectorsPerCluster,	 bdptor.ReservedSectors,	 bdptor.FATs,	 bdptor.RootDirEntries,	 bdptor.LogicSectors,	 bdptor.MediaType,	 bdptor.SectorsPerFAT,	 bdptor.SectorsPerTrack,	 bdptor.Heads,	 bdptor.HiddenSectors);#endif}void findDate(unsigned short *year,	      unsigned short *month,	      unsigned short *day,	      unsigned char info[2]){  int date;    date = RevByte(info[0],info[1]);  *year = ((date & MASK_YEAR) >> 9) + 1980;  *month = (date & MASK_MONTH) >> 5;  *day = (date & MASK_DAY);}void findTime(unsigned short *hour,	      unsigned short *min,	      unsigned short *sec,	      unsigned char info[2]){  int time;    time = RevByte(info[0],info[1]);    //  printf("time %x\n",time);  *hour = (time & MASK_HOUR) >> 11;  *min = (time &  MASK_MIN) >> 5;  *sec = (time & MASK_SEC) * 2;}/* bug for fix */void FileNameFormat_old(unsigned char *name){  unsigned char *q,*k,filename[12];  q = name;  k = name;    while (*q != ' ')    q++;  *q = '\0';  strcpy(filename,k);  /* name */  *q = ' ';  strcat(filename,".");  while (*q == ' ')    q++;  k = q;  strcat(filename,k);  /* extension */  strcpy(name,filename);}void FileNameFormat(unsigned char *name){  unsigned char *p;  /* stripp the traling space */  p = name + strlen(name) - 1;  while (*p == ' ')    p--;  p++;  *p = '\0';}/*  * Function : scan root dir entry */void ScanRootEntry(){  struct Entry entry;  int ret,offset;  if ((ret = lseek(fd,ROOTDIR_OFFSET,SEEK_SET)) < 0)    perror("lseek ROOTDIR_OFFSET failed");  offset = ROOTDIR_OFFSET;  while (offset < DATA_OFFSET) {    ret = GetEntry(&entry);    offset += abs(ret);    if (ret > 0) {      printf("%12s\t"	     "%d:%d:%d\t "	     "%d:%d:%d\t "	     "%d\t "	     "%d\t\t "	     "%s\n",	     entry.short_name,	     entry.year, entry.month, entry.day,	     entry.hour, entry.min, entry.sec,	     entry.size,	     entry.FirstCluster,	     (entry.subdir) ? "dir" : "file");    }  }}/* Argument : entry, Type : struct Entry * * Return   : offset for success, -count for fail or no entry * Function : get entry from cluster or root dir * Comment  : One Entry maybe 32,64,96 Bytes */int GetEntry(struct Entry *pentry){  int ret,i;  int count = 0;  unsigned char buf[DIR_ENTRY_SIZE],info[2];  /* read 32 Bytes */  if ((ret = read(fd,buf,DIR_ENTRY_SIZE)) < 0)    perror("read entry failed");  count += ret;  if (buf[0] == 0xe5 || buf[0] == 0x00) /* not used or deleted entry */    return -1*count;  else {    while (buf[11] == 0x0f) {	      /* long file name entry, skip it */      if ((ret = read(fd,buf,DIR_ENTRY_SIZE)) < 0)	perror("read root dir failed");      count += ret;    }    /* valid entry */    for (i = 0; i <= 10; i++)      pentry->short_name[i] = buf[i];    pentry->short_name[i] = '\0';    FileNameFormat(pentry->short_name);    info[0] = buf[22];    info[1] = buf[23];    findTime(&(pentry->hour),&(pentry->min),&(pentry->sec),info);    info[0] = buf[24];    info[1] = buf[25];    findDate(&(pentry->year),&(pentry->month),&(pentry->day),info);    pentry->FirstCluster = RevByte(buf[26],buf[27]);    pentry->size = RevWord(buf[28],buf[29],buf[30],buf[31]);    pentry->readonly = (buf[11] & ATTR_READONLY) ? 1 : 0;    pentry->hidden   = (buf[11] & ATTR_HIDDEN)   ? 1 : 0;    pentry->system   = (buf[11] & ATTR_SYSTEM)   ? 1 : 0;    pentry->vlabel   = (buf[11] & ATTR_VLABEL)   ? 1 : 0;    pentry->subdir   = (buf[11] & ATTR_SUBDIR)   ? 1 : 0;    pentry->archive  = (buf[11] & ATTR_ARCHIVE)  ? 1 : 0;    return count;  }}/*  * Function : list current dir contents * Return   : 1 for success, -1 for fail  */int fd_ls(){  int ret,offset,cluster_addr;  struct Entry entry;  /* Header */  printf("\tname\tdate\t\t time\t\tsector\tsize\t\tattr\n");  if (curdir == NULL) {       /* print root dir */    ScanRootEntry(fd);  } else {        /* subdir start address,here only read one sector,ignore fat */    cluster_addr = DATA_OFFSET + (curdir->FirstCluster - 2) * SECTOR_SIZE;    if ((ret = lseek(fd,cluster_addr,SEEK_SET)) < 0)      perror("lseek cluster_addr failed");        offset = cluster_addr;    while (offset < cluster_addr + SECTOR_SIZE) {      ret = GetEntry(&entry);      offset += abs(ret);      if (ret > 0) {	printf("%12s\t"	       "%d:%d:%d\t "	       "%d:%d:%d\t "	       "%d\t "	       "%d\t\t"	       "%s\n",	       entry.short_name,	       entry.year, entry.month, entry.day,	       entry.hour, entry.min, entry.sec,	       entry.size,	       entry.FirstCluster,	       (entry.subdir) ? "dir" : "file");      }    }  }  return 0;}/* Argument : entryname, Type : char * *          : pentry, Type : struct Entry* *          : mode, Type : int, mode=1 for dir; mode=0 for file * Return   : offset( >0 ) if success or -1 if failed * Function : scan current dir for the entry, file or dir */int ScanEntry(char *entryname,struct Entry *pentry,int mode){  int ret,offset,i;  int cluster_addr;  char uppername[80];  for (i = 0; i < strlen(entryname); i++)    uppername[i] = toupper(entryname[i]);  uppername[i] = '\0';  if (curdir == NULL) {    /* scan in root dir */    if ((ret = lseek(fd,ROOTDIR_OFFSET,SEEK_SET)) < 0)      perror("lseek ROOTDIR_OFFSET failed");        offset = ROOTDIR_OFFSET;    while (offset < DATA_OFFSET) {      ret = GetEntry(pentry);      offset += abs(ret);      if (pentry->subdir == mode && !strcmp(pentry->short_name,uppername))	return offset;    }    /* no entry for entryname */    return -1;  } else {    /* scan in non-root dir , bug cd .. not support */    cluster_addr = DATA_OFFSET + (curdir->FirstCluster - 2) * SECTOR_SIZE;    if ((ret = lseek(fd,cluster_addr,SEEK_SET)) < 0)      perror("lseek cluster_addr failed");    offset = cluster_addr;    while (offset < cluster_addr + SECTOR_SIZE) {      ret = GetEntry(pentry);      offset += abs(ret);      if (pentry->subdir == mode && !strcmp(pentry->short_name,uppername))	  	return offset;    }    /* no entry for entryname */    return -1;  }}/* Argument : dir, Type char * * Return   : 1 if success, or -1 if failed * Function : change dir to parent dir or subdir * e.g "cd .." or "cd subdir", full path not support  */int fd_cd(char *dir){  struct Entry *pentry;  int ret;  if (!strcmp(dir,"."))         /* cd . */    return 1;  if (!strcmp(dir,"..") && curdir == NULL)    return 1;  pentry = (struct Entry*)malloc(sizeof(struct Entry));  /* scan current dir for the name of parent dir */  ret = ScanEntry(dir,pentry,1);  if (ret < 0) {    printf("no such dir\n");    free(pentry);    return -1;  }  free(curdir);  curdir = pentry;#ifdef DEBUG/*   printf("%12s\t" *//* 	 "%d:%d:%d\t " *//* 	 "%d:%d:%d\t " *//* 	 "%d\t " *//* 	 "%d\t\t " *//* 	 "%s\n", *//* 	 pentry->short_name, *//* 	 pentry->year, pentry->month, pentry->day, *//* 	 pentry->hour, pentry->min, pentry->sec, *//* 	 pentry->size, *//* 	 pentry->FirstCluster, *//* 	 (pentry->subdir) ? "dir" : "file"); */  #endif  return 1;}/* Argument : prev, Type unsigned short, previous cluster number * Return   : next cluster  * Function : get next cluster in fat  */unsigned short GetFatCluster(unsigned short prev){  unsigned short next,fatentry;  int index;    index = prev * 1.5;  fatentry = RevByte(fatbuf[index],fatbuf[index+1]);  if (prev % 2 == 1)    next = fatentry >> 4;  else    next = fatentry & 0x0fff;  return next;}/* Argument : cluster, Type unsigned short, cluster number * Return   : void * Function : clear the cluster in fat */void ClearFatCluster(unsigned short cluster){  int index;  index = cluster * 1.5;    if (cluster % 2 == 1) {    fatbuf[index] &= 0x0f;    fatbuf[index+1] &= 0x00;  } else {    fatbuf[index] &= 0x00;    fatbuf[index+1] &= 0xf0;  }}/* Argument : filename, Type char * * Return   : 1 if success, or -1 if failed * Function : remove a file in current dir */int fd_rm(char *filename){  struct Entry *pentry;  int ret;  unsigned char c;  unsigned short seed,next;  pentry = (struct Entry*)malloc(sizeof(struct Entry));  /* scan current dir for the name of file */  ret = ScanEntry(filename,pentry,0);  if (ret < 0) {    printf("no such file\n");    free(pentry);    return -1;  }  /* clear fat entry */  seed = pentry->FirstCluster;  while ((next = GetFatCluster(seed)) != 0x0fff) {    seed = next;    ClearFatCluster(next);  }  ClearFatCluster(pentry->FirstCluster);  /* clear dir entry */  c = 0xe5;  if (lseek(fd,ret-0x40,SEEK_SET) < 0)    perror("lseek fd_rm failed");  if (write(fd,&c,1) < 0)    perror("write failed");  if (lseek(fd,ret-0x20,SEEK_SET) < 0)    perror("lseek fd_rm failed");  if (write(fd,&c,1) < 0)    perror("write failed");  free(pentry);  /* write to fat */  if (WriteFat() < 0)      exit(1);  return 1;}int WriteFat(){  if (lseek(fd,FAT_ONE_OFFSET,SEEK_SET) < 0) {    perror("lseek failed");    return -1;  }  if (write(fd,fatbuf,0x1200) < 0) {    perror("read failed");    return -1;  }  if (lseek(fd,FAT_TWO_OFFSET,SEEK_SET) < 0) {    perror("lseek failed");    return -1;  }  if (write(fd,fatbuf,0x1200) < 0) {    perror("read failed");    return -1;  }  return 1;}int ReadFat(){  if (lseek(fd,FAT_ONE_OFFSET,SEEK_SET) < 0) {    perror("lseek failed");    return -1;  }  if (read(fd,fatbuf,0x1200) < 0) {    perror("read failed");    return -1;  }  return 1;}  int main(){  if ((fd = open(DEVNAME,O_RDWR)) < 0)    perror("open failed");  if (ReadFat() < 0)     exit(1);  /* test zero */  ScanBootSector();  ScanRootEntry();  /* test one */  //  fd_cd("xxx");  /* test two */  //  fd_ls();  /* test three */  //fd_rm("filesys");  close(fd);  free(curdir);  return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情图片小说一区| 91色在线porny| 日本视频一区二区| 国内精品久久久久影院色| 国产91富婆露脸刺激对白| 91免费看片在线观看| 色综合久久中文字幕| 日韩天堂在线观看| 国产精品久久久久四虎| 中文字幕一区免费在线观看 | 国产精品视频一二| 视频在线观看91| 奇米影视7777精品一区二区| 国产综合久久久久久鬼色| 日本高清无吗v一区| 欧美精品一区二区久久久| 国产色产综合色产在线视频 | 亚洲综合免费观看高清完整版 | 精品日韩99亚洲| 亚洲另类春色校园小说| 国内精品国产成人| 欧美人伦禁忌dvd放荡欲情| 欧美tickling挠脚心丨vk| 夜夜精品视频一区二区 | 久久丝袜美腿综合| 亚洲www啪成人一区二区麻豆 | 中文字幕中文乱码欧美一区二区 | 亚洲国产精品久久人人爱| 国产成人免费在线观看不卡| 欧美一区二区在线视频| 亚洲麻豆国产自偷在线| 国产成人免费在线| 日韩欧美成人激情| 日韩精品亚洲一区| 欧美亚洲另类激情小说| 亚洲视频图片小说| 成人av网址在线| 国产色产综合色产在线视频| 亚洲一区二区3| 99国产精品国产精品久久| 久久久www成人免费无遮挡大片| 天堂在线亚洲视频| 欧美性生活影院| 一区二区三区蜜桃网| 91视频一区二区三区| 亚洲人成网站精品片在线观看 | 久久99国产精品久久99果冻传媒| 欧美色老头old∨ideo| 一区二区视频免费在线观看| 色噜噜久久综合| 亚洲色图一区二区三区| 91日韩在线专区| 中文字幕高清不卡| 懂色av一区二区三区免费观看| 久久伊人中文字幕| 国产乱人伦精品一区二区在线观看 | 成人av免费在线观看| 国产亚洲精品7777| 国产aⅴ综合色| 亚洲色图.com| 欧美日韩另类一区| 亚洲综合成人在线视频| 欧美久久久久久久久| 美女一区二区在线观看| 欧美精品777| 麻豆专区一区二区三区四区五区| 日韩精品一区二区三区在线播放 | 日韩二区三区在线观看| 欧美一区二区三区免费大片| 美腿丝袜亚洲综合| 欧美大片在线观看| 成人一级视频在线观看| 自拍偷在线精品自拍偷无码专区 | 91免费视频网址| 亚洲一区二区综合| 日韩欧美123| 91视频观看免费| 精品一区二区三区欧美| 亚洲欧美视频在线观看视频| 欧美成人女星排名| 在线观看亚洲精品视频| 国产乱码字幕精品高清av| 婷婷久久综合九色综合绿巨人| 久久精品夜色噜噜亚洲aⅴ| 欧美日韩视频在线观看一区二区三区 | 欧美成人a在线| 色欧美乱欧美15图片| 国产麻豆91精品| 婷婷久久综合九色国产成人| 亚洲欧洲成人自拍| 国产日韩在线不卡| 欧美一级生活片| 欧日韩精品视频| 99视频精品免费视频| 麻豆精品在线观看| 婷婷久久综合九色综合伊人色| 中文字幕字幕中文在线中不卡视频| 精品日韩在线观看| 日韩理论在线观看| 久久色在线视频| 日韩欧美在线123| 91麻豆精品国产91久久久久久久久| 不卡在线观看av| 国产成人三级在线观看| 久久精品国产99国产精品| 视频一区视频二区中文字幕| 日韩理论片网站| 自拍偷在线精品自拍偷无码专区| 欧美激情一区二区三区在线| 精品国产髙清在线看国产毛片| 91精品久久久久久久久99蜜臂| 欧美午夜一区二区三区| 欧美性猛交xxxxxx富婆| 色偷偷久久人人79超碰人人澡| 国产福利视频一区二区三区| 国产一区二区视频在线| 麻豆精品一区二区综合av| 蜜臀av性久久久久av蜜臀妖精| 日韩av一区二区三区| 日本一区中文字幕| 蜜桃一区二区三区在线观看| 奇米综合一区二区三区精品视频| 免费一级片91| 精品制服美女丁香| 国产精品综合在线视频| 国产成人午夜99999| 99精品欧美一区二区三区小说| 99久久久国产精品| 一本高清dvd不卡在线观看| 在线观看91视频| 欧美一区二区三区免费| 精品日韩欧美在线| 国产精品久久久久aaaa樱花| 日韩毛片高清在线播放| 性做久久久久久久免费看| 日本美女视频一区二区| 国产在线精品一区二区不卡了| 国产成人午夜99999| 91美女福利视频| 5858s免费视频成人| 久久久99久久| 一区二区三区免费看视频| 婷婷国产v国产偷v亚洲高清| 九九视频精品免费| av午夜一区麻豆| 欧美精品久久天天躁| 久久九九久精品国产免费直播| 国产精品第13页| 日韩av在线发布| 成人免费视频播放| 欧美日韩国产片| 国产午夜精品福利| 亚瑟在线精品视频| 粉嫩av亚洲一区二区图片| 欧美视频一二三区| 国产区在线观看成人精品 | 久久精品在这里| 午夜精彩视频在线观看不卡| 国产激情一区二区三区| 欧美在线观看一区二区| 337p日本欧洲亚洲大胆精品| 亚洲自拍都市欧美小说| 国产精品一区二区在线观看网站| 一本一本大道香蕉久在线精品| 欧美xxxxx牲另类人与| 亚洲精品免费播放| 日韩激情在线观看| 成人黄色综合网站| 日韩一区二区免费视频| 亚洲另类一区二区| 处破女av一区二区| 欧美一区二区网站| 亚洲乱码中文字幕| 国内精品伊人久久久久影院对白| 欧美亚洲国产一区在线观看网站| 久久精品在线免费观看| 日本视频中文字幕一区二区三区| 91麻豆视频网站| 国产精品无码永久免费888| 日本系列欧美系列| 欧美四级电影网| 国产精品三级电影| 日韩va亚洲va欧美va久久| 91亚洲男人天堂| 国产精品国产三级国产普通话三级 | 亚洲精品一二三| 成人激情文学综合网| 久久久久久电影| 久久se精品一区精品二区| 欧美高清精品3d| 亚洲制服丝袜在线| 色婷婷综合久久久中文字幕| 国产精品天美传媒沈樵| 国产精品538一区二区在线| 日韩欧美aaaaaa| 麻豆国产欧美一区二区三区| 欧美日本乱大交xxxxx| 亚洲成人动漫精品| 欧美美女视频在线观看| 婷婷综合另类小说色区|