Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 19 Apr 2006 14:46:53 -0500
From:      Dan Nelson <dnelson@allantgroup.com>
To:        Mathieu Prevot <bsdhack@club-internet.fr>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: sysctl(3) and sysctl(8) discrepancies
Message-ID:  <20060419194653.GB18095@dan.emsphone.com>
In-Reply-To: <20060419160436.GA6835@scienceclue.ath.cx>
References:  <20060419160436.GA6835@scienceclue.ath.cx>

next in thread | previous in thread | raw e-mail | index | archive | help
In the last episode (Apr 19), Mathieu Prevot said:
> Hello,
> 
> I have FreeBSD 6.1-RC #27: Wed Apr 19 02:08:00 CEST 2006 amd64 and I have 3
> different outputs about hw.ncpu:
> 
> `sysctl hw.ncpu` gives me:
> 
> 'hw.ncpu: 2'
> 
> 
> and I have:
> 
> hw.ncpu = 6
> hw.ncpu = 3
> 
> 
> with:
> 
> #include <stdlib.h>
> #include <sys/types.h>
> #include <sys/sysctl.h>
> 
> main()
> {
>   int ncpu[1];
> 	size_t len;
> 
> 	len=sizeof(int);
> 	sysctlnametomib("hw.ncpu",ncpu,&len);

You want sysctlbyname() here instead.  sysctlnametomib() returns a
pointer to a mib array that you can pass to the sysctl() function
later.  Saves having to parse the string every time if you are looking
up the same sysctl repeatedly.

        sysctlbyname("hw.ncpu", &ncpu, &len, NULL, 0);

HW_NCPU is the mib number for hw.ncpu if you want to build the mib
array manually.

-- 
	Dan Nelson
	dnelson@allantgroup.com



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20060419194653.GB18095>