免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1433 | 回复: 7
打印 上一主题 下一主题

急!!!!! 通过libstat库获取SUN主机磁盘利用率? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-02-19 17:44 |只看该作者 |倒序浏览
各位大虾,请问:

怎么通过libstat库获取SUN主机磁盘利用率?急!!!!!望不吝赐教

先谢了!!!!

论坛徽章:
0
2 [报告]
发表于 2005-02-19 19:24 |只看该作者

急!!!!! 通过libstat库获取SUN主机磁盘利用率?

下面小程序取得所有文件系统信息。sparc solaris 8/sun workshop C++


  1. // file: f.cpp
  2. // compile: CC f.cpp
  3. // run: ./a.out

  4. #include <cstdio>;
  5. #include <unistd.h>;
  6. #include <sys/vfs.h>;
  7. #include <sys/statvfs.h>;

  8. #include <string>;
  9. #include <fstream>;

  10. #define MTAB_FILE "/etc/mnttab"

  11. static int get_mountpoint(const char *line, char *mntpoint)
  12. {
  13.         char tmp[1024];
  14.         if(sscanf(line, "%s%s",tmp, mntpoint)!=2)
  15.         {
  16.                 return -1;
  17.         }
  18.         return 0;
  19. }

  20. int main()
  21. {
  22.         std::ifstream in;

  23.         in.open(MTAB_FILE, std::ios_base::in);
  24.         if(!in.is_open())
  25.         {
  26.                 exit(1);
  27.         }

  28.         char line[512];
  29.         char mntpoint[512];
  30.         struct statvfs buf;

  31.         while( !in.eof() )
  32.         {
  33.                 in.getline(line, sizeof(line));
  34.                 if(get_mountpoint(line, mntpoint)!=0)
  35.                 {
  36.                         continue;

  37.                 }
  38.                 if(statvfs(mntpoint, &buf)==0)
  39.                 {
  40.                         long avail = (buf.f_bavail>;>;10)*buf.f_frsize;
  41.                         long total = (buf.f_blocks>;>;10) * buf.f_frsize;
  42.                         printf("%s: total = %ld, avail = %ld\n", mntpoint, total, avail);
  43.                 }
  44.         }
  45. }

复制代码

论坛徽章:
0
3 [报告]
发表于 2005-02-19 23:10 |只看该作者

急!!!!! 通过libstat库获取SUN主机磁盘利用率?

多谢楼上的兄弟
我明天去公司试试

论坛徽章:
0
4 [报告]
发表于 2005-02-20 09:53 |只看该作者

急!!!!! 通过libstat库获取SUN主机磁盘利用率?

楼上的兄弟,多谢了
我试过你的方法可以
不过直接取f_bavail和f_blocks就可以了,不用系数的

多谢你的帮助!!!!

论坛徽章:
0
5 [报告]
发表于 2005-02-20 10:47 |只看该作者

急!!!!! 通过libstat库获取SUN主机磁盘利用率?

有问题啊
当f_basetype为ufs时取的值正确,
但是取swap分区时,其f_basetype为tmpfs时,取值则不对

请问这是什么问题?难道statvfs()对不同的f_basetype类型所取值的块的大小不同?

论坛徽章:
0
6 [报告]
发表于 2005-02-20 11:18 |只看该作者

急!!!!! 通过libstat库获取SUN主机磁盘利用率?

以下是我在www.sun.com论坛看到的帖子,statvfs仅适用于ufs
Thanks for your answer.
I have discovered that it (statvfs.h) doe's not work with vxfs, only with ufs.
I am using Veritas Cluster Server.
Any chance of an answer ??

thanks,
R.

论坛徽章:
0
7 [报告]
发表于 2005-02-20 11:27 |只看该作者

急!!!!! 通过libstat库获取SUN主机磁盘利用率?

df -k得到的数据
文件系统              千字节    用了    可用 容量      挂接在
swap                 11839280      16 11839264     1%    /var/run
swap                 11839368     104 11839264     1%    /tmp
采用2楼兄弟方法得到的数据
/var/run: total = 1479713, avail = 1479711
/tmp: total = 1479724, avail = 1479711

11839280和1479713不一样,其它ufs分区的数据都是一样的
请问真的是statvfs不适用于tmpfs吗?要真那样的话,返回值就出错了
这到底是怎么回事?请2楼的兄弟和其它的高手点拨点拨

先谢了!!!!

论坛徽章:
0
8 [报告]
发表于 2005-02-20 13:46 |只看该作者

急!!!!! 通过libstat库获取SUN主机磁盘利用率?

我弄错了
2楼的兄弟做的是对的
不过
这样可能会好些
magic = buf.f_frsize >;>; 10;
avail = buf.f_bavail * magic;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP