GithubHelp home page GithubHelp logo

tklauser / go-sysconf Goto Github PK

View Code? Open in Web Editor NEW
137.0 5.0 27.0 305 KB

sysconf for Go, without using cgo

Home Page: https://pkg.go.dev/github.com/tklauser/go-sysconf

License: BSD 3-Clause "New" or "Revised" License

Go 100.00%
sysconf go golang linux bsd system-programming unix posix cgo getconf

go-sysconf's Introduction

go-sysconf

Go Reference GitHub Action Status

sysconf for Go, without using cgo or external binaries (e.g. getconf).

Supported operating systems: Linux, macOS, DragonflyBSD, FreeBSD, NetBSD, OpenBSD, Solaris/Illumos.

All POSIX.1 and POSIX.2 variables are supported, see References for a complete list.

Additionally, the following non-standard variables are supported on some operating systems:

Variable Supported on
SC_PHYS_PAGES Linux, macOS, FreeBSD, NetBSD, OpenBSD, Solaris/Illumos
SC_AVPHYS_PAGES Linux, OpenBSD, Solaris/Illumos
SC_NPROCESSORS_CONF Linux, macOS, FreeBSD, NetBSD, OpenBSD, Solaris/Illumos
SC_NPROCESSORS_ONLN Linux, macOS, FreeBSD, NetBSD, OpenBSD, Solaris/Illumos
SC_UIO_MAXIOV Linux

Usage

package main

import (
	"fmt"

	"github.com/tklauser/go-sysconf"
)

func main() {
	// get clock ticks, this will return the same as C.sysconf(C._SC_CLK_TCK)
	clktck, err := sysconf.Sysconf(sysconf.SC_CLK_TCK)
	if err == nil {
		fmt.Printf("SC_CLK_TCK: %v\n", clktck)
	}
}

References

go-sysconf's People

Contributors

abner-chenc avatar dependabot[bot] avatar tklauser avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

go-sysconf's Issues

sysconf_values_linux_riscv64.go:7:24: _AIO_PRIO_DELTA_MAX redeclared in this block

By trying to build https://github.com/shirou/gopsutil which uses go-sysconf as a dependency I keep getting this error, not sure if it's gopsutil's author mistake or if something is broken over here, just to let you know.

# github.com/tklauser/go-sysconf
../../../go/src/github.com/tklauser/go-sysconf/zsysconf_values_linux_riscv64.go:7:24: _AIO_PRIO_DELTA_MAX redeclared in this block
	previous declaration at ../../../go/src/github.com/tklauser/go-sysconf/zsysconf_values_linux_amd64.go:7:24
../../../go/src/github.com/tklauser/go-sysconf/zsysconf_values_linux_riscv64.go:8:24: _BC_BASE_MAX redeclared in this block
	previous declaration at ../../../go/src/github.com/tklauser/go-sysconf/zsysconf_values_linux_amd64.go:8:24
../../../go/src/github.com/tklauser/go-sysconf/zsysconf_values_linux_riscv64.go:9:24: _BC_DIM_MAX redeclared in this block
	previous declaration at ../../../go/src/github.com/tklauser/go-sysconf/zsysconf_values_linux_amd64.go:9:24
../../../go/src/github.com/tklauser/go-sysconf/zsysconf_values_linux_riscv64.go:10:24: _BC_SCALE_MAX redeclared in this block
	previous declaration at ../../../go/src/github.com/tklauser/go-sysconf/zsysconf_values_linux_amd64.go:10:24
../../../go/src/github.com/tklauser/go-sysconf/zsysconf_values_linux_riscv64.go:11:24: _BC_STRING_MAX redeclared in this block
	previous declaration at ../../../go/src/github.com/tklauser/go-sysconf/zsysconf_values_linux_amd64.go:11:24
../../../go/src/github.com/tklauser/go-sysconf/zsysconf_values_linux_riscv64.go:12:24: _COLL_WEIGHTS_MAX redeclared in this block
	previous declaration at ../../../go/src/github.com/tklauser/go-sysconf/zsysconf_values_linux_amd64.go:12:24
../../../go/src/github.com/tklauser/go-sysconf/zsysconf_values_linux_riscv64.go:13:24: _DELAYTIMER_MAX redeclared in this block
	previous declaration at ../../../go/src/github.com/tklauser/go-sysconf/zsysconf_values_linux_amd64.go:13:24
../../../go/src/github.com/tklauser/go-sysconf/zsysconf_values_linux_riscv64.go:14:24: _EXPR_NEST_MAX redeclared in this block
	previous declaration at ../../../go/src/github.com/tklauser/go-sysconf/zsysconf_values_linux_amd64.go:14:24
../../../go/src/github.com/tklauser/go-sysconf/zsysconf_values_linux_riscv64.go:15:24: _HOST_NAME_MAX redeclared in this block
	previous declaration at ../../../go/src/github.com/tklauser/go-sysconf/zsysconf_values_linux_amd64.go:15:24
../../../go/src/github.com/tklauser/go-sysconf/zsysconf_values_linux_riscv64.go:16:24: _LINE_MAX redeclared in this block
	previous declaration at ../../../go/src/github.com/tklauser/go-sysconf/zsysconf_values_linux_amd64.go:16:24
../../../go/src/github.com/tklauser/go-sysconf/zsysconf_values_linux_riscv64.go:16:24: too many errors

openbsd/i386 build fails

The problem is with golang 1.16.6 symbol unix.RLIMIT_NPROC undefined on openbsd/i386 (all fine on openbsd/amd64):
https://github.com/tklauser/go-sysconf/blob/v0.3.6/sysconf_openbsd.go#L22

From the build log (https://github.com/rclone/rclone/runs/3150179581?check_suite_focus=true#step:15:35), section "compile all architectures test":

2021/07/24 10:53:13 Failed to run [go build --ldflags -s -X github.com/rclone/rclone/fs.Version=v1.56.0-beta.5602.1fcdec087.merge -trimpath -o rclone-v1.56.0-beta.5602.1fcdec087.merge-openbsd-386/rclone -tags  ..]: exit status 2
2021/07/24 10:53:13 Command output was:
# github.com/tklauser/go-sysconf
Error: ../../../../go/pkg/mod/github.com/tklauser/[email protected]/sysconf_openbsd.go:22:28: undefined: unix.RLIMIT_NPROC

rclone/rclone#5402 is pending on this issue.

TestGetconf fails with OPEN_MAX

--- FAIL: TestGetconf (0.00s)
    sysconf_test.go:87: Sysconf(OPEN_MAX/4) returned 1048576, want 1024
FAIL

I think it's related to golang/go#46279

So my system OPEN_MAX is 1024, and Go just bumps it to 1024*1024. However getconf still reports the origin one.

`undefined: unix.ClockGetres`

Linux AMD64, go 1.17

github.com/tklauser/go-sysconf/sysconf_linux.go:133:12: undefined: unix.ClockGetres

golang.org/x/sys/unix/syscall_linux.go marked ClockGetres as Unimplemented

1489 /*
1490  * Unimplemented
1491  */
1492 // AfsSyscall
1493 // Alarm
1494 // ArchPrctl
1495 // Brk
1496 // Capget
1497 // Capset
1498 // ClockGetres

Trivial documentation bug in README.md

README.md has the following example:

func main() {
	// get clock ticks, this will return the same as C.sysconf(C._SC_CLK_TCK)
	clktck, err := sysconf.Sysconf(sysconf.SC_CLK_TCK)
	if err != nil {
		fmt.Printf("SC_CLK_TCK: %v\n", clktck)
	}
}

I think the if block should execute if there is no error, i.e. if err == nil.

Currently the example is printing the value of clktck if an error occurred.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.