8. Invocación de la llamada al sistema

01.11.2013 00:00

Invocación con un programa en lenguaje C


Para comprobar que el nuevo kernel ya tiene implementada la llamada al sistema que se creó desde un inicio, puede probarse este código:
 
prueba.c
 

#include 
#include 
#include 
#include 

int main(){
	int aux ;
	printf("\n\n ---------- Ejemplo de llamada al kernel especial ---------- \n") ;
	aux = syscall(351) ;

	printf(" > Retorno de la llamada: = %d , ErrNo = %d " , aux , errno ) ;
	printf("\n----------\n") ;

	printf("\nNOTA: El programa despliega ''Llamada: 2013 y ErrNo: 0'' si se implemento la llamada al sistema al Kernel, de lo contrario despliega ''Llamada: -1'' con su ErrNo, indicando que el actual Kernel no tiene implementada la llamada a sistema '351'...") ;

	printf("\n\n Por: Raul Garcia Cortes \n\n\n") ;
}

 
Hay que observar que usa la primitiva de la libc syscall, la cual se encarga hacer la llamada al sistema con el código que se le pasa de parámetro (en este caso 351, la llamada que se implementó, que retornará el número 2013 cuando se mande a llamar).
 
Para compilar el programa, se usan los siguientes comandos:
 

gcc prueba.c -o Prueba

 
Si todo salió bien, al compilar este programa y ejecutarlo, deberá dar el siguiente resultado:
 

./Prueba
---------- Ejemplo de llamada al kernel especial ----------
 > Retorno de la llamada: = 2013 , ErrNo = 0

 
lo que indica que la llamada está funcionando y haciendo lo que debe .
 
Si se compila y ejecuta el mismo programa en un kernel que no tiene implementada esta llamada a sistema, o se cambia el número 351 por otro, la salida será semejante a:
 

./Prueba
---------- Ejemplo de llamada al kernel especial ----------
 > Retorno de la llamada: = -1 , ErrNo = 38

 

./Prueba
---------- Ejemplo de llamada al kernel especial ----------
 > Retorno de la llamada: = -1 , ErrNo = 22


Invocación correcta:

 
Pantallazo-28.png


 
 
Invocación incorrecta:

 

en donde syscall retornó -1, y errno tiene el valor 38 u otro número, que significa function not implemented (función no implementada) u otro error semejante.

Volver

Si compartes el contenido en otro sitio web, agrega un enlace a la publicación original.

©2013-2023 Raúl GC