go语言检查磁盘分区使用情况
利用系统调用syscall.Statfs获取磁盘分区使用情况
package main
import (
"fmt"
"math"
"errors"
"syscall"
)
func PartitionUsage(path string) (int, error) {
fs := syscall.Statfs_t{}
err := syscall.Statfs(path, &fs)
if err != nil {
return 0, err
} else if fs.Blocks <= 0 {
return 0, errors.New("partition size is zero")
}
allBlock := fs.Blocks
usedBlock := fs.Blocks - fs.Bfree
round := func(x float64) int { return int(math.Floor(x + 0.5)) }
return round(float64(usedBlock) / float64(allBlock) * 100), nil
}
func main() {
usage, _ := PartitionUsage("/home")
fmt.Println(usage)
}
函数PartitionUsage()返回分区的使用百分比。参数path是分区的路径,返回使用的四舍五入百分比值。
其中函数round就是模拟四舍五入的运算。
运行结果:
$ go build && ./main
92
$ df | grep /home
/dev/... 172721768 158096648 14625120 92% /home