github.com/kayoticsully/syncthing@v0.8.9-0.20140724133906-c45a2fdc03f8/cmd/syncthing/memsize_linux.go (about)

     1  package main
     2  
     3  import (
     4  	"bufio"
     5  	"errors"
     6  	"os"
     7  	"strconv"
     8  	"strings"
     9  )
    10  
    11  func memorySize() (uint64, error) {
    12  	f, err := os.Open("/proc/meminfo")
    13  	if err != nil {
    14  		return 0, err
    15  	}
    16  
    17  	s := bufio.NewScanner(f)
    18  	if !s.Scan() {
    19  		return 0, errors.New("/proc/meminfo parse error 1")
    20  	}
    21  
    22  	l := s.Text()
    23  	fs := strings.Fields(l)
    24  	if len(fs) != 3 || fs[2] != "kB" {
    25  		return 0, errors.New("/proc/meminfo parse error 2")
    26  	}
    27  
    28  	kb, err := strconv.ParseUint(fs[1], 10, 64)
    29  	if err != nil {
    30  		return 0, err
    31  	}
    32  	return kb * 1024, nil
    33  }