Documentos de Académico
Documentos de Profesional
Documentos de Cultura
if (fork()==0) { if (fork()== 0)
} else {
} else {
wait(NULL);
Respuesta: El programa quiere realizar el sort de un fichero, pon ende hay que
colocar en primer lugar el contenido del fichero en una tubería. Aquí en este punto
el proceso puede pasar a un estado de bloqueo si llena la tubería y no saliendo de
este estado al no haber ningún proceso que lea de ella y esta quede vacía. Si la
tubería tuviese espacio para almacenar el fichero completo, la ejecución
continuaría y se mostraría el resultado al ejecutar la orden sort sobre el contenido
del fichero.
Su solución seria declarar los fork, incluir otras librerías, asociar quien será el
padre y quien será el hijo. Ejemplo de cómo compilaría:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
using namespace std;
int main (int argc, char *argv[]) {
int tubo[2];
pipe(tubo);
pid_t c_pid = fork();
if (c_pid == 0){
if (c_pid == 0)
{
// instrucciones que solo el proceso padre hará
dup2 (tubo[1], STDOUT_FILENO);
close(tubo[0]);
close(tubo[1]);
execlp("ls", "ls", NULL);
}
else
{
// instrucciones que solo el proceso hijo hará
dup2 (tubo[0], STDIN_FILENO);
close(tubo[0]);
close(tubo[1]);
execlp("wc", "wc", "-l", NULL);
}
}
else {
wait(NULL);
printf ("Fin del proceso\n");
}
}
2. Dados los siguientes procesos y sus respectivas secuencias de código, indica
si existiría o no situación de interbloqueo y explica por qué. En cualquier caso,
indica también la salida por pantalla y el valor final de los semáforos. Supón
que inicialmente todos los semáforos tienen valor cero.