获取磁盘占用情况 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
}
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)
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(&lpTotalNumberOfFreeBytes)))
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。