trying to sysctl(3) a char value

David DEMELIER demelier.david at gmail.com
Wed Nov 24 17:48:56 UTC 2010


Hello,

Since I cannot adjust the brightness on my HP Probook because it sucks
I'm writing a small script that can be use instead. I need to sysctl
the following sysctl variables :

hw.acpi.video.lcd0.brightness
hw.acpi.video.lcd0.levels

the -brightness one is easy since it's an integer, but the levels is
possibly a char :

markand at Melon ~ $ sysctl hw.acpi.video.lcd0.brightness
hw.acpi.video.lcd0.brightness: 90
markand at Melon ~ $ sysctl hw.acpi.video.lcd0.levels
hw.acpi.video.lcd0.levels: 100 50 0 5 10 15 20 25 30 33 36 40 43 46 50
55 60 65 70 75 80 83 86 90 93 96 100

How can I store the content of hw.acpi.video.lcd0.levels? This small
code doesn't work :

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/sysctl.h>

int
main(int argc, char *argv[])
{
	char buf[128];
	size_t len;

	len = sizeof (buf);

	if (sysctlbyname("hw.acpi.video.lcd0.levels", &buf, &len, NULL, 0) == -1) {
		perror("sysctl");
		return -1;
	}

	printf("levels = %s\n", buf);
}

markand at Melon ~ $ ./a.out
levels = d

Kind regards,

-- 
Demelier David


More information about the freebsd-questions mailing list