Provided by:
manpages-es_1.55-10_all 
NOMBRE
sysctl - lee/escribe parametros del sistema
SINOPSIS
#include <unistd.h>
#include <linux/unistd.h>
#include <linux/sysctl.h>
_syscall1(int, _sysctl, struct __sysctl_args *, args);
int _sysctl(struct __sysctl_args *args);
DESCRIPCI'ON
La llamada _sysctl lee o escribe parametros del nucleo. Por ejemplo, el
nombre del computador, o el numero maximo de ficheros abiertos. El
argumento tiene la forma
struct __sysctl_args {
int *name; /* vector describiendo la variable */
int nlen; /* longitud de este vector */
void *oldval; /* 0 o dir. donde guardar valor antiguo */
size_t *oldlenp; /* sitio disponible para el valor antiguo,
sobrescrito por el tamano real de dicho valor */
void *newval; /* 0 o direccion del nuevo valor */
size_t newlen; /* tamano del nuevo valor */
};
Esta llamada efectua una busqueda en una estructura de arbol,
posiblemente parecido a un arbol de directorios bajo /proc/sys, y si lo
pedido se encuentra, llama a alguna rutina apropiada para leer o
modificar el valor.
EJEMPLO
#include <linux/unistd.h>
#include <linux/types.h>
#include <linux/sysctl.h>
_syscall1(int, _sysctl, struct __sysctl_args *, args);
int sysctl(int *name, int nlen, void *oldval, size_t *oldlenp,
void *newval, size_t newlen)
{
struct __sysctl_args args={name,nlen,oldval,oldlenp,newval,newlen};
return _sysctl(&args);
}
#define SIZE(x) sizeof(x)/sizeof(x[0])
#define OSNAMESZ 100
char osname[OSNAMESZ];
int osnamelth;
int name[] = { CTL_KERN, KERN_OSTYPE };
main(){
osnamelth = sizeof(osname);
if (sysctl(name, SIZE(name), osname, &osnamelth, 0, 0))
perror("sysctl");
else
printf("Esta maquina ejecuta %*s\n", osnamelth, osname);
return 0;
}
VALOR DEVUELTO
Tras una terminacion exitosa, _sysctl devuelve 0. En otro caso, se
devuelve el valor -1 y se pone en errno un valor que indica el error.
ERRORES
ENOTDIR
name no se ha encontrado.
EPERM No habia permiso de paso para uno de los `directorios'
encontrados, o no habia permiso de lectura donde oldval era no-
cero, o no habia permiso de escritura donde newval era no-cero.
EFAULT La llamada pidio el valor anterior poniendo oldval como no NULL,
pero se permitio un espacio cero en oldlenp.
CONFORME A
Esta llamada es especifica de Linux, y no deberia emplearse en
programas pretendidamente transportables. Una llamada sysctl ha estado
presente en Linux desde la version 1.3.57. Se origino en 4.4BSD. Solo
Linux tiene el espejo /proc/sys, y los esquemas de nomenclatura de
objetos difieren entre Linux y BSD 4.4, pero la declaracion de la
funcion sysctl(2) es la misma en ambos.
FALLOS
Los nombres de los objetos varian entre versiones del nucleo. ESTO
HACE QUE ESTA LLAMADA AL SISTEMA SEA INUTIL PARA LAS APLICACIONES. Use
en su lugar la interfaz /proc/sys.
No todos los objetos disponibles estan correctamente documentados.
Aun no es posible cambiar el sistema operativo escribiendo en
/proc/sys/kernel/ostype. :-)
V'EASE TAMBI'EN
proc(5)