9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
學習啦 > 學習電腦 > 操作系統 > Linux教程 > linux獲取文件系統信息的腳本代碼

linux獲取文件系統信息的腳本代碼

時間: 恒輝636 分享

linux獲取文件系統信息的腳本代碼

  源碼如下:

  #include

  #include

  #include

  #include

  //文件系統信息結構體

  struct fileSystem_info{

  char fileSystem_format[8];

  char fileSystem_total_capacity[11];

  char fileSystem_free_capacity[11];

  char fileSystem_permissions[3];

  };

  /*獲取文件系統信息*/

  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;

  }

  /*獲取文件系統信息*/

  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精品国产兔费观看久久99| AV老司机色爱区综合| 日韩熟女乱综合一区二区| 国产jlzzjlzz视频免费看 | 日本精品一区二区不卡| 国内精品亚洲成av人片| 国产又黄又爽又不遮挡视频| 男人狂桶女人高潮嗷嗷| 亚洲综合小综合中文字幕| 亚洲国产精品无码久久电影| 丰满岳乱妇三级高清| 女人张开腿让男人桶爽| 亚洲综合国产激情另类一区| 天美传媒mv免费观看完整| 亚洲精品天堂在线观看| 一区二区中文字幕av| 亚洲av伊人久久综合性色| 久久国产乱子伦免费精品无码 | 一卡2卡三卡4卡免费网站| 一本色道久久综合熟妇人妻| 蜜臀av黑人亚洲精品| 久久中文字幕无码一区二区| 日本怡春院一区二区三区| 可以在线观看的亚洲视频| 亚洲国产成人va在线观看天堂| 疯狂做受xxxx高潮欧美日本| 久久精品夜夜夜夜夜久久| 国产成人亚洲综合图区| 韩国精品福利视频一区二区| 一出一进一爽一粗一大视频| 免费VA国产高清大片在线| 国产精品福利自产拍久久| 国产精品区一区第一页| 成人精品网一区二区三区| 永久免费av无码网站直播| 天美传媒xxxxhd videos3| 亚洲AV无码AV在线影院| 国产精品中文字幕免费| 国语偷拍视频一区二区三区|