1234567891011121314151617181920212223242526272829303132333435363738394041 |
- #+build i386, amd64
- #+build linux
- package sysinfo
- import "base:runtime"
- import "core:sys/linux"
- import "core:strings"
- import "core:strconv"
- @(init, private)
- init_cpu_core_count :: proc "contextless" () {
- context = runtime.default_context()
- fd, err := linux.open("/proc/cpuinfo", {})
- if err != .NONE { return }
- defer linux.close(fd)
- // This is probably enough right?
- buf: [4096]byte
- n, rerr := linux.read(fd, buf[:])
- if rerr != .NONE || n == 0 { return }
- str := string(buf[:n])
- for line in strings.split_lines_iterator(&str) {
- key, _, value := strings.partition(line, ":")
- key = strings.trim_space(key)
- value = strings.trim_space(value)
- if key == "cpu cores" {
- if num_physical_cores, ok := strconv.parse_int(value); ok {
- cpu.physical_cores = num_physical_cores
- }
- }
- if key == "siblings" {
- if num_logical_cores, ok := strconv.parse_int(value); ok {
- cpu.logical_cores = num_logical_cores
- }
- }
- }
- }
|