在Golang中获取系统的磁盘空间内存占用
发布时间:2020-12-16 09:30:28 所属栏目:大数据 来源:网络整理
导读:获取磁盘占用情况(Linux/Mac下有效) import ( "syscall") type DiskStatus struct { All uint64 `json:"all"` Used uint64 `json:"used"` Free uint64 `json:"free"`} // disk usage of path/diskfunc DiskUsage(path string) (disk DiskStatus) { fs := sys
获取磁盘占用情况(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 }
后记
2019年1月6号更新,windows下获取磁盘空间的方法通过调用win32 api 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))) }
2013年4月6号更新,sans-serif; font-size: 16px; color: #4f4f4f; line-height: 26px; overflow-x: auto; word-wrap: break-word;">通过调用win32 api(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |