• <output id="aynwq"><form id="aynwq"><code id="aynwq"></code></form></output>

    <mark id="aynwq"><option id="aynwq"></option></mark>
  • <mark id="aynwq"><option id="aynwq"></option></mark><label id="aynwq"><dl id="aynwq"></dl></label>
  • 學習啦 > 學習電腦 > 操作系統(tǒng) > Linux教程 > linux獲取文件系統(tǒng)信息的腳本代碼

    linux獲取文件系統(tǒng)信息的腳本代碼

    時間: 恒輝636 分享

    linux獲取文件系統(tǒng)信息的腳本代碼

      源碼如下:

      #include

      #include

      #include

      #include

      //文件系統(tǒng)信息結構體

      struct fileSystem_info{

      char fileSystem_format[8];

      char fileSystem_total_capacity[11];

      char fileSystem_free_capacity[11];

      char fileSystem_permissions[3];

      };

      /*獲取文件系統(tǒng)信息*/

      int get_fileSystem_info(const char *fileSystem_name, struct fileSystem_info *fi);

      /*block to kbyte*/

      static unsigned long kscale(unsigned long m_block, unsigned long m_kbyte);

      /*convert size to GB MB KB*/

      static char *convert_size(float m_size, char *dest);

      int main()

      {

      char buf[1024];

      struct fileSystem_info fileSysInfo;

      get_fileSystem_info("/",&fileSysInfo);

      printf("%s\n",fileSysInfo.fileSystem_format);

      printf("%s\n",fileSysInfo.fileSystem_free_capacity);

      printf("%s\n",fileSysInfo.fileSystem_total_capacity);

      printf("%s\n",fileSysInfo.fileSystem_permissions);

      return 0;

      }

      /*獲取文件系統(tǒng)信息*/

      int get_fileSystem_info(const char *fileSystem_name,struct fileSystem_info *fi)

      {

      struct statfs buf;

      float fileSystem_total_size = 0;

      float fileSystem_free_size = 0;

      if(statfs(fileSystem_name,&buf))

      {

      fprintf(stderr,"statfs %s\n",strerror(errno));

      return -1;

      }

      switch(buf.f_type)

      {

      case 0xEF51:

      case 0xEF53:

      sprintf(fi->fileSystem_format,"EXT");

      break;

      case 0x4d44:

      sprintf(fi->fileSystem_format,"FAT");

      break;

      case 0x5346544e:

      sprintf(fi->fileSystem_format,"NIFS");

      break;

      default:

      sprintf(fi->fileSystem_format,"unknown");

      break;

      }

      bzero(&fi->fileSystem_total_capacity,sizeof(fi->fileSystem_total_capacity));

      bzero(&fi->fileSystem_free_capacity,sizeof(fi->fileSystem_free_capacity));

      printf("blocks %ld\n",buf.f_blocks);

      printf("bfree %ld\n",buf.f_bfree);

      printf("bsize %ld\n",buf.f_bsize);

      fileSystem_total_size =

      (float)(kscale(buf.f_blocks, buf.f_bsize));

      fileSystem_free_size =

      (float)(kscale(buf.f_bfree, buf.f_bsize));

      printf("total %f\n",fileSystem_total_size);

      printf("free %f\n",fileSystem_free_size);

      convert_size(fileSystem_total_size,fi->fileSystem_total_capacity);

      convert_size(fileSystem_free_size,fi->fileSystem_free_capacity);

      bzero(fi->fileSystem_permissions,sizeof(fi->fileSystem_permissions));

      sprintf(fi->fileSystem_permissions,"rw");

      return 0;

      }

      /*block to kbyte*/

      static unsigned long kscale(unsigned long m_block, unsigned long m_kbyte)

      {

      return ((unsigned long long) m_block * m_kbyte + 1024 / 2 ) /1024;

      }

      /*convert size to GB MB KB*/

      static char *convert_size(float m_size, char *dest)

      {

      if((((m_size / 1024.0) / 1024.0)) >= 1.0)

      {

      sprintf(dest,"%0.2fGB",(m_size/1024.0)/1024.0);

      }

      else if((m_size / 1024.0) >= 1.0)

      {

      sprintf(dest,"%0.2fMB",(m_size/1024));

      }

      else

      {

      sprintf(dest,"%0.2fKB",m_size);

      }

      return dest;

      }

      總結:

      1、關于 struct statfs 結構體信息參考:http://blog.csdn.net/u011641885/article/details/46919027

      2、對于fileSystem_total_size 使用float 類型,是為了精確度更高。buysbox 中的 fdisk 源碼使用的是整型相除,約為4舍五入。

      3、kscale 函數中 使用 unsigned long long 類型 是因為 m_block 與 m_byte 原本是long 型,相乘的結果超出了 long 類型的可以表示數據位。

    168438 主站蜘蛛池模板: 九九电影院理论片| 99热免费精品| 大狠狠大臿蕉香蕉大视频| 一区二区在线观看视频| 夫妻免费无码V看片| 97人人模人人爽人人少妇| 国产精品毛片完整版视频| 免费观看美女用震蛋喷水的视频| 国产成人无码精品久久久露脸 | 你懂的电影在线| 久久久久国产午夜| 探花国产精品三级在线播放| 一区二区三区影院| 有夫之妇bd中文字幕| 亚洲综合综合在线| 欧美日韩高清在线观看 | 99heicom视频| 国产精品成人va在线观看| 91香蕉短视频| 四虎影视永久在线yin56xyz| 第一福利视频导航| 亚洲欧美中文日韩综合| 波多野结衣中文一区二区免费| 亚洲国产av无码精品| 欧美人与动牲高清| 久久夜色精品国产欧美| 性欧美vr高清极品| Channel| 国产福利免费视频| 色噜噜狠狠色综合日日| 伊人不卡久久大香线蕉综合影院| 欧美性xxxxx极品娇小| 久久亚洲精品无码AV红樱桃| 妺妺窝人体色WWW在线观看| 一区二区三区免费视频网站 | 97日日碰人人模人人澡| 国产高清自产拍av在线| 黄色网站小视频| 午夜看一级特黄a大片黑| 禁忌2电影在线观看完整版免费观看 | 国产精品资源网|