Considerando que, la función exec () se usa para cambiar el programa actual existente por el nuevo. Esta sustitución se realiza haciendo modificaciones al contenido de un programa o archivo. Entonces, la diferencia entre fork y exec es que fork crea un nuevo proceso a partir del proceso existente, y exec se usa para reemplazar el programa existente creando uno nuevo.
Prerrequisitos
Para ejecutar cualquier programa c en su sistema Linux, necesitamos instalar algunos requisitos previos en él. Vaya a la terminal utilizando el método de acceso directo Ctrl + Alt + T. Ahora escriba los siguientes comandos para instalar las páginas del manual.
$ sudo apt install manpages-dev
Instalará todas las páginas correspondientes.
En el futuro, para ejecutar un programa en Linux, debe instalar un compilador de código. Que se usa para compilar el código y ejecutarlo. Para ello instalaremos repositorios GCC en nuestro sistema.
$ sudo apt install GCC
Codificación con ejecutivo en c
Como hemos instalado las páginas de manual en Linux, usaremos el siguiente comando para ver la descripción de exec. La sintaxis de muestra principal es la siguiente:
Sintaxis
Exec (nombre de ruta / archivo, argv);Aquí hemos utilizado el "unistd.h ”, ya que contiene toda la información de las familias de funciones ejecutivas.
$ man ejecutivo
Ahora, en la imagen citada anteriormente, puede observar los tipos de ejecutivos. Estas son la familia de funciones ejecutivas. Cada uno es para una función diferente siguiendo la misma base, "exec."
Ejemplo: Ahora, avanzando, describiremos la funcionalidad de exec con la ayuda de un ejemplo. Tomaremos una función de ejecutivo para demostrar su funcionamiento, que es "execv."En primer lugar, crearemos dos archivos con la extensión".C.”Después de su creación, escribiremos los códigos respectivos en ellos y los ejecutaremos para ver el resultado.
Considere un nombre de archivo "sample4.C". Ábrelo y usa el siguiente código. En este código, hemos utilizado execv de una manera particular que se cita a continuación.
Execv (“./ sample4copy ”, args);La primera parte contiene la nueva ruta del directorio, y la segunda parte muestra la matriz de argumentos como un parámetro que hemos pasado.
Muestra4.C
En primer lugar, hemos impreso la identificación del proceso actual. En segundo lugar, hemos creado una matriz de caracteres que tiene NULL al final para la terminación. En tercer lugar, hemos llamado a la función sample4copy.
Sample4copy.CCuando llamamos a la función exec (), la imagen del proceso cambia. A continuación, la imagen citada a continuación muestra el código de sample4copy.C.
Aquí solo hemos utilizado declaraciones de impresión para obtener la identificación del proceso actual.
La salida de los códigos respectivos se puede obtener utilizando los siguientes comandos.
$ GCC-o sample4 sample4.C$ GCC -o sample4copy sample4copy.C
PS ./ sample4
Como hemos descrito anteriormente, la palabra "GCC" se utiliza para compilar el código, y después de compilar, el código se ejecuta correctamente.
Según la imagen, el PID de sample4.El archivo c se muestra primero, ya que se declaró antes de la llamada ejecutiva. Luego, después de llamar a la función exec (), ambas declaraciones de impresión del archivo sample4copy.c se ejecuta donde getpid () se usa para obtener la identificación del proceso.
Codificar con un tenedor en c
La función fork () crea el proceso hijo a partir del proceso padre. También contiene dos encabezados, incluida la información de la bifurcación.
Sintaxis:
Pid_t fork (vacío);Podemos usar la página de manual para obtener ayuda en el uso
$ man fork
Ejemplo: Ahora considere un ejemplo creando un archivo "sample3.C". Ingresaremos el código dentro del archivo. De acuerdo con el código, hemos establecido el estado de la bifurcación como forkrank.
Muestra3.C
Hemos utilizado la declaración "if-else" para aplicar la condición. Aquí se declaran comandos de impresión simples para ayudar a comprender el concepto fork (). Forkrank se declara primero como 0 y luego como -1. Con un fork (), ahora hay dos procesos que funcionan al mismo tiempo. La salida se puede obtener usando el mismo código, como se usó anteriormente en el ejemplo exec.
$ GCC -o sample3.CPS./ sample3
La salida muestra que el proceso hijo se ejecuta antes que el padre cuando el proceso padre estaba esperando. La función de espera implica que hace que la función principal espere a menos que se termine uno de todos los procesos secundarios.
Llamadas al sistema Fork y Exec colectivamente
Aquí tomaremos dos archivos llamados "sample1.c ”y“ sample2.C". Primero, abra el archivo sampl1.cy escriba el código que se adjunta a continuación en la imagen. Hemos utilizado la llamada al sistema fork () aquí; cuando se crea el proceso hijo, p se asignará con 0. Mientras usa la llamada al sistema de exec, el sample1.c será reemplazado por sample2.C.
Muestra1.C
Muestra2.C
Similar a los ejemplos discutidos anteriormente, el archivo sample2 contendrá las declaraciones printf en él. En muestra1.c, el primer comando de impresión se ejecuta primero, luego se llama a la función fork, cuando p == 0, luego se ejecuta la porción secundaria y sample2.Se ejecutará el archivo c. La salida contendrá GCC para compilar ambos archivos. Aquí padre sample1.c id y sample2.c id es diferente porque son padres e hijos.
Conclusión
En este artículo, hemos utilizado fork y exec por separado y colectivamente para comprender el uso y el concepto fácilmente. Espero que este tutorial contenga suficiente contenido que lo lleve a acceder a la escalada de su conocimiento.