¿Qué es una llamada al sistema en Linux y cómo funciona con ejemplos?

What Is System Call Linux



Una llamada al sistema es una función que permite que un proceso se comunique con el kernel de Linux. Es solo una forma programática para que un programa de computadora solicite una instalación desde el kernel del sistema operativo. Las llamadas al sistema exponen los recursos del sistema operativo a los programas de usuario a través de una API (interfaz de programación de aplicaciones). Las llamadas al sistema solo pueden acceder al marco del kernel. Las llamadas al sistema son necesarias para todos los servicios que necesitan recursos.

El kernel de Linux es un software propietario que se carga y opera en el dispositivo en la etapa menos potencial. Su trabajo consiste en organizar todo lo que sucede en la máquina, desde el teclado, la unidad de disco y los eventos de red hasta proporcionar intervalos de tiempo para la ejecución simultánea de diferentes programas. La separación de software y hardware crea una burbuja segura que mejora la protección y la confiabilidad. Las aplicaciones sin privilegios no pueden alcanzar el almacenamiento de otro programa y, si uno falla, el kernel suspende el proceso para que no dañe todo el sistema.







Envoltura fina de oblea:

Las llamadas al sistema Linux no se procesan explícitamente en el kernel en ciertos programas. Casi todos los programas utilizan la biblioteca C básica y ofrecen un contenedor ligero pero esencial sobre las llamadas al sistema Linux. Luego, el repositorio proporciona la llamada de máquina Linux adjunta después de asegurarse de que los parámetros de la función se traduzcan en los registros correctos del procesador. Siempre que el contenedor recibe datos de la llamada al sistema, los analiza y los aporta al programa de forma clara. Cualquier operación interactiva con la máquina en un programa se convierte en última instancia en una llamada al sistema. Entonces, echemos un vistazo a algunos de ellos. Existe una larga lista de llamadas al sistema Linux que podemos usar en nuestro sistema Linux. Aquí está la lista de algunas llamadas al sistema Linux más comunes y más utilizadas.



  • Abierto
  • Cerrar
  • Ejecutiva
  • Escribir
  • Leer
  • Lseek
  • Seleccione

Analicemos algunas de las llamadas al sistema Linux que utilizan el lenguaje C en nuestro artículo para ponernos manos a la obra.



Llamada al sistema abierto:

Podemos usar la llamada al sistema abierto en nuestra distribución de Linux para abrir rápidamente el documento, que especificaremos en nuestro código de lenguaje C. Inicie el terminal de comandos en primer lugar. Puede usar el atajo Ctrl + Alt + T. Suponga que tiene un archivo de texto test.txt en el directorio de inicio y contiene algo de contenido. Entonces, al principio, debe crear un nuevo nombre de archivo de tipo C new.c en el terminal a través del editor nano. Por lo tanto, pruebe la sencilla instrucción nano a continuación.





$nanonuevo.c

Ahora, se ha lanzado el editor Nano. Escriba el código que se muestra a continuación. Tenemos dos descriptores de archivo en el código. Ambos archivos se pueden abrir mediante la llamada al sistema abierto. El primer descriptor contiene una llamada de lectura y el segundo contiene la función de escritura. La primera llamada abierta es abrir el archivo de texto test.txt y guardar su contenido en el descriptor de archivo fd. La segunda llamada al sistema abierto está creando un archivo llamado target. El destino del documento se ha reembolsado a un descriptor de archivo fd1. La instrucción de escritura se utiliza para transcribir los bytes de datos en el búfer. Toque Ctrl + S para guardar el código y presione la tecla de acceso directo Ctrl + X para salir del archivo.



Ejecute la instrucción de compilación gcc para compilar este código C.

$gccnuevo.c

Ejecutemos el código usando la consulta simple a.out en el shell de la siguiente manera:

$./fuera

Los datos de salida se han transmitido al destino del archivo. Revisemos el archivo de destino usando la consulta cat. La pantalla de salida muestra los datos de 20 caracteres en el archivo de destino.

$gatoobjetivo

Llamada al sistema ejecutivo:

La llamada al sistema ejecutivo se está cancelando para ejecutar un archivo que se está procesando actualmente. El archivo ejecutable anterior se sustituye y el archivo actual se opera siempre que se llama a exec. Al usar una llamada al sistema exec, podemos suponer que al hacerlo se sobrescribirá el documento o la aplicación anterior en el bucle con uno nuevo. Se utiliza un nuevo software para anular todo el material del proceso. El documento cuyo título se da en la declaración siempre que se invoca exec () se sustituye por la sección de información del usuario que ejecuta la llamada al sistema exec () (). Entonces, abra el terminal de comando y, usando el editor nano, cree un nuevo archivo de tipo C de la siguiente manera:

$nanoexp.c

El editor se ha abierto ahora. Escriba todo el código de lenguaje C a continuación. Hay tres bibliotecas principales incluidas en él. Después de eso, se ha creado una instancia de la función principal. La declaración de impresión ha estado mostrando los datos de la cadena y el Id. De proceso del archivo exp.c. La función getpid () se ha utilizado para este propósito. Luego tenemos una matriz de tipo de caracteres con algunos valores en ella. La llamada al sistema ejecutivo se ha utilizado para tomar el nombre del archivo y la matriz de una línea anterior como argumento. Ahora se procesará el archivo hello.c. Después de eso, llega otra declaración de impresión hasta ahora, pero nunca se ejecutará. Presione Ctrl + S para guardar este archivo. Presione Ctrl + X para salir.

Ahora es el momento de crear otro archivo c, hola.c usando el editor nano. Utilice la siguiente consulta en el shell para hacerlo.

$nanoHola C

Escriba el siguiente código en él. Este código contiene dos declaraciones de impresión en la función principal. El primero es solo imprimir una cadena dada en él, y el segundo es imprimir la cadena mientras busca el ID de proceso del archivo que se usa actualmente, que es hello.c.

Compilemos ambos archivos uno tras otro usando gcc.

$gcc–O exp exp.c

$gcc–O hola hola.c

Cuando ejecutamos el archivo exp.c, generará la primera declaración de impresión del archivo exp.c y las dos líneas de impresión del archivo hello.c.

$./exp

Conclusión:

Hemos elaborado todo el concepto de llamadas al sistema Linux y cómo se pueden utilizar en su sistema Linux. Hemos utilizado Ubuntu 20.04 al implementar este concepto.