给定一个硬盘标识,umout掉所有相关挂载

来源:互联网 发布:java监控系统 编辑:程序博客网 时间:2024/06/11 06:27
  1 #include <fcntl.h>  2  #include <string.h>  3  #include <assert.h>  4  #include <pthread.h>  5  #include <unistd.h>  6  #include <stdlib.h>  7  #include <sys/stat.h>  8  #include <sys/time.h>  9  #include <errno.h> 10  #include <stdio.h> 11  #include <linux/reboot.h> 12  #include <dirent.h> 13  #include <sys/mount.h> 14   15  //def for bool 16  #ifndef bool //8bit 17  #define bool unsigned char 18  #endif 19  #ifndef NULL 20  #define NULL ((void*)0) 21  #endif 22  #ifndef false 23  #define false 0 24  #endif 25  #ifndef true 26  #define true 1 27  #endif 28  //end of def for bool 29   30  /* 31   * check file is exist!! 32   */ 33  static bool file_exist(const char* path) 34  { 35   36      if(!path) return false; 37      if(access(path,F_OK) == 0) 38      { 39          return true;//file exist 40      } 41      printf("[Info] file:%s is not exist!\n",path); 42      return false ; //file is not exist 43   44  } 45  static int umount_disk_partition(const char* disk) 46  { 47      if(!disk) 48          return 0; 49       50  #define MOUNTS_FILE_SIZE  2048 51      const char* mounts = "/proc/self/mounts"; 52      const char* delims = " "; 53   54      bool bug = true; 55      char buf[MOUNTS_FILE_SIZE] = {0}; 56      int fd,ret = 0; 57      int row = 0; 58      char *start = NULL,*end = NULL,*lineend = NULL,*cp = NULL,*result = NULL; 59  60      if((fd = open(mounts,O_RDONLY)) < 0) 61      { 62          perror("open error:"); 63          return -1; 64      } 65      if(lseek(fd,0,SEEK_SET) == (off_t)-1) 66      { 67          printf("lseek: %s (%d)\n", strerror(errno), errno); 68          close(fd); 69          return -1; 70      } 71      if((ret = read(fd,buf,sizeof(buf)-1)) < 0 ) 72      { 73          perror("read error:"); 74          close(fd); 75          return -1; 76      } 77      close(fd); 78      end = buf + ret; 79      *end = 0; 80      start = buf; 81      while(start < end) 82      { 83          lineend = strchr(start,'\0'); 84          if(!lineend) 85              break; 86          *lineend = 0; 87           88          cp = strstr(start,disk); 89          if(!cp)  90          { 91              start = lineend + 1; 92              continue; 93          } 94           95          result = strtok(cp,delims); 96          row = 0; 97          while(result) 98          { 99              if(row == 1)100              {101                  bug && printf("mount points:%s \n",result);102                  umount2(result,MNT_FORCE);103                  break;104              }105              row++;106              result = strtok(NULL,delims);107          }108          start = cp + 1;109      }110      111      112      return 0;113  }114  main()115  {116      umount_disk_partition("/dev/mtdblock");117  }
0 0
原创粉丝点击