sysctl(3) and sysctl(8) discrepancies
Dan Nelson
dnelson at allantgroup.com
Wed Apr 19 19:47:01 UTC 2006
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 at allantgroup.com
More information about the freebsd-hackers
mailing list