diskusage.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. // +build !windows
  2. package du
  3. import "syscall"
  4. // DiskUsage contains usage data and provides user-friendly access methods
  5. type DiskUsage struct {
  6. stat *syscall.Statfs_t
  7. }
  8. // NewDiskUsages returns an object holding the disk usage of volumePath
  9. // or nil in case of error (invalid path, etc)
  10. func NewDiskUsage(volumePath string) *DiskUsage {
  11. var stat syscall.Statfs_t
  12. syscall.Statfs(volumePath, &stat)
  13. return &DiskUsage{&stat}
  14. }
  15. // Free returns total free bytes on file system
  16. func (du *DiskUsage) Free() uint64 {
  17. return du.stat.Bfree * uint64(du.stat.Bsize)
  18. }
  19. // Available return total available bytes on file system to an unprivileged user
  20. func (du *DiskUsage) Available() uint64 {
  21. return uint64(du.stat.Bavail) * uint64(du.stat.Bsize)
  22. }
  23. // Size returns total size of the file system
  24. func (du *DiskUsage) Size() uint64 {
  25. return uint64(du.stat.Blocks) * uint64(du.stat.Bsize)
  26. }
  27. // Used returns total bytes used in file system
  28. func (du *DiskUsage) Used() uint64 {
  29. return du.Size() - du.Free()
  30. }
  31. // Usage returns percentage of use on the file system
  32. func (du *DiskUsage) Usage() float32 {
  33. return float32(du.Used()) / float32(du.Size())
  34. }