golang 获取磁盘内存占用

获取磁盘占用情况 linux mac下有效

import (

"syscall"

)


type DiskStatus struct {

All uint64 `json:"all"`

Used uint64 `json:"used"`

Free uint64 `json:"free"`

}


// disk usage of path/disk

func DiskUsage(path string) (disk DiskStatus) {

fs := syscall.Statfs_t{}

err := syscall.Statfs(path, &fs)

if err != nil {

return

}

disk.All = fs.Blocks * uint64(fs.Bsize)

disk.Free = fs.Bfree * uint64(fs.Bsize)

disk.Used = disk.All - disk.Free

return

}
获取内存占用
import (

"runtime"

)


type MemStatus struct {

All uint32 `json:"all"`

Used uint32 `json:"used"`

Free uint32 `json:"free"`

Self uint64 `json:"self"`

}


func MemStat() MemStatus {

//自身占用

memStat := new(runtime.MemStats)

runtime.ReadMemStats(memStat)

mem := MemStatus{}

mem.Self = memStat.Alloc


//系统占用,仅linux/mac下有效

//system memory usage

sysInfo := new(syscall.Sysinfo_t)

err := syscall.Sysinfo(sysInfo)

if err == nil {

mem.All = sysInfo.Totalram * uint32(syscall.Getpagesize())

mem.Free = sysInfo.Freeram * uint32(syscall.Getpagesize())

mem.Used = mem.All - mem.Free

}

return mem

}
通过调用win32 api windows下获取磁盘空间
func main() {

kernel32, err := syscall.LoadLibrary("Kernel32.dll")

if err != nil {

log.Panic(err)

}

defer syscall.FreeLibrary(kernel32)

GetDiskFreeSpaceEx, err := syscall.GetProcAddress(syscall.Handle(kernel32), "GetDiskFreeSpaceExW")


if err != nil {

log.Panic(err)

}


lpFreeBytesAvailable := int64(0)

lpTotalNumberOfBytes := int64(0)

lpTotalNumberOfFreeBytes := int64(0)

r, a, b := syscall.Syscall6(uintptr(GetDiskFreeSpaceEx), 4,

uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr("C:"))),

uintptr(unsafe.Pointer(&lpFreeBytesAvailable)),

uintptr(unsafe.Pointer(&lpTotalNumberOfBytes)),

uintptr(unsafe.Pointer(&lpTotalNumberOfFreeBytes)), 0, 0)


log.Printf("Available %dmb", lpFreeBytesAvailable/1024/1024.0)

log.Printf("Total %dmb", lpTotalNumberOfBytes/1024/1024.0)

log.Printf("Free %dmb", lpTotalNumberOfFreeBytes/1024/1024.0)

}

更简单的版本

func main() {

h := syscall.MustLoadDLL("kernel32.dll")

c := h.MustFindProc("GetDiskFreeSpaceExW")

lpFreeBytesAvailable := int64(0)

lpTotalNumberOfBytes := int64(0)

lpTotalNumberOfFreeBytes := int64(0)

r2, _, err := c.Call(uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr("F:"))),

uintptr(unsafe.Pointer(&lpFreeBytesAvailable)),

uintptr(unsafe.Pointer(&lpTotalNumberOfBytes)),

uintptr(unsafe.Pointer(&lpTotalNumberOfFreeBytes)))

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值