disk.go 520 B

1234567891011121314151617181920212223242526
  1. package linux
  2. import (
  3. "syscall"
  4. )
  5. type Disk struct {
  6. All uint64 `json:"all"`
  7. Used uint64 `json:"used"`
  8. Free uint64 `json:"free"`
  9. FreeInodes uint64 `json:"freeInodes"`
  10. }
  11. func ReadDisk(path string) (*Disk, error) {
  12. fs := syscall.Statfs_t{}
  13. err := syscall.Statfs(path, &fs)
  14. if err != nil {
  15. return nil, err
  16. }
  17. disk := Disk{}
  18. disk.All = fs.Blocks * uint64(fs.Bsize)
  19. disk.Free = fs.Bfree * uint64(fs.Bsize)
  20. disk.Used = disk.All - disk.Free
  21. disk.FreeInodes = fs.Ffree
  22. return &disk, nil
  23. }