请问ioctl能得到某个硬盘已经使用空间的信息吗?
我知道通过ioctl(fd,BLKGETSIZE,&f_size)可以得到某个硬盘的空间大小信息,请问有有没有类似的办法获得该硬盘已经使用空间的大小.
当然,如果使用df -k也可以得到硬盘使用空间的信息,不过那么做需要把输出信息重定向到文件,然后再对文件进行解析才行,很麻烦。
忘哪位大侠不吝赐教,是在感激不尽。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
谢谢楼上的啊, 说的真详细.
我想我已经有办法完成这个功能了.谢谢所有楼上的热心人.
你通常只能够知道系统已经挂入的分割区的空间使用率,而不是整个磁碟的分割区的空间使用率。
要知道挂入的分割区有哪些,一般可以解析 /etc/mtab 该文档内容,取每一行以 space 为分隔的第一个项目就是装置名称。
复制代码
所以这就可以带给 statfs() 呼叫取得相关资讯。
若是你要更低阶一点,也就是要能够知道实际硬碟有哪些分割区,还有分割区档案系统空间使用率 ? 那很抱歉事情没有这么简单。
要这样的话,一般 /proc/partitions 会产生侦测到的 block device 的相关资讯,包含 major/minor number 与 block space 的大小,像是:
复制代码
这个至少可以知道有哪些分割区与划分出来的空间。然后你得具备 ext2/ext3 等 fs 的解析资讯,自己开启 /dev 内的设备档,判断是哪种 filesystem 类型,自行读取 superblock 资讯来取得 block 使用资讯。
==
谢谢楼上的精彩回答. 你的方法的思路就是取得某个分区的挂载点的路径,然后statfs这个挂载点的路径,从而取得它的空间占用信息对不?
不过要取得整个sda硬盘的空间占用信息,必须statfs获取它的从sda1到sda8的空间占用信息,从而获得这个硬盘的占用信息对不?
我现在还有一个问题是,如果硬盘sda,确实分区有sda1到sda8这样8个分区, 我如何用函数确定sda1是对应哪个挂载点啊?
复制代码
复制代码
复制代码
==
请问楼上的能给点具体信息吗?
我查过statfs函数,似乎没这个功能啊。
statfs()
man statfs
==