Una llamada system() es una forma de que los programas interactúen con el sistema operativo. Se utiliza para ejecutar un comando dentro de un proceso. La llamada del sistema proporciona los servicios del sistema operativo a los programas de usuario a través de la interfaz de programación de aplicaciones (API). Proporciona una interfaz entre un proceso y un sistema operativo y no reemplaza la imagen del proceso actual.
Sintaxis:
#include<stdio.h>
#include<stdlib.h>
int system(const char *comando);
A continuación se muestra el programa C para implementar el sistema().
C
// C program to implement // system() #include <stdio.h> #include <stdlib.h> int main() { printf("step before system call\n"); system("ps"); printf("step after system call\n"); }
Producción:
La llamada execl() reemplaza la imagen del proceso actual con una nueva imagen de proceso especificada por la ruta, es decir, el código de proceso actual se reemplaza por un nuevo código de proceso.
Sintaxis:
#include<stdio.h>
#include<unistd.h>
int execl(const char *ruta, const char *arg, . . . /* (char *) NULL */);
A continuación se muestra el programa C para implementar el execl().
C
// C program to implement // execl() #include <stdio.h> #include <unistd.h> int main() { printf("step before execl call\n"); execl("/bin/ps", "ps", NULL); printf("step after execl call"); }
Producción:
Diferencia en el funcionamiento de la llamada system() y execl()
En la llamada system():
- El sistema de código() no reemplaza la imagen del proceso actual que es a.out.
- Entonces, la primera declaración se imprime, es decir, «paso antes de la llamada al sistema», el otro proceso ps se crea usando la llamada system() que continúa imprimiendo de forma independiente la salida del comando ps mientras que a.out también continúa e imprime usando la segunda declaración printf() es decir, «paso después de la llamada al sistema».
- Como se ve en el comando out of ps, había dos procesos a.out (con PID 2556) y ps (con PID 2558).
En la llamada execl():
- La sentencia printf(“Paso antes de llamar a execl\n”); se imprime y luego se llama a execl(), que reemplaza la imagen del proceso actual con el nuevo proceso, es decir, ps.
- Por lo tanto, se imprime la salida del comando ps y no la segunda instrucción printf().
- La salida de ps también muestra la entrada solo para ps y no para a.out (el proceso original) porque la imagen de a.out se reemplaza por la imagen del proceso ps.
sistema() frente a excl()
No. S. | sistema() | excl() |
---|---|---|
1. | La llamada system() crea un nuevo proceso. | La llamada execl() no crea un nuevo proceso. |
2. | No reemplaza la imagen del proceso actual. | Reemplaza la imagen del proceso actual. |
3. | La llamada al sistema proporciona una interfaz entre un proceso y un sistema operativo. | Devuelve cualquier valor. |
4. | Las llamadas al sistema están disponibles como instrucciones en lenguaje ensamblador. |
Se necesitan dos argumentos:
|
5. | Las llamadas al sistema se realizan cuando un proceso en modo usuario requiere acceso a un recurso. | Carga el programa en el espacio de proceso actual y lo ejecuta desde el punto de entrada. |
Publicación traducida automáticamente
Artículo escrito por arunbang17 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA