Pasar al contenido principal

Práctica 6

Versión para impresiónSend by email

La idea de esta práctica es usar el concepto de las tuberías o pipes, para hacer la práctica 7 de ARQO, donde se dibujaban imágenes pasadas por parámetro cada 3 segundos, usando el programa display.

Resultados Pedidos:

Creación del programa de visualización de imágenes usando tuberías

pinta.c - Crea, para cada argumento, un hijo que ejecuta display y recibe por una tubería, mientras el padre le pasa por esa tubería el contenido de los archivos de cada uno de los parámetros.
 

#define _GNU_SOURCE
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sched.h>
#include <signal.h>
#include <fcntl.h>

int main(int argc, char *argv[]) {
	int i;
	int pid;
        int tubo[2];
	int fd;
	int nleidos;
	char* buffer[128];
	

	// Recuerda: STDIN = 0, STDOUT = 1, STERR = 2

	for(i = 1; i < argc; i++) {
		pipe(tubo);

		if((pid = fork()) == 0) {		// FORK - Proceso Hijo
   			fprintf(stdout, "%s", "Hijo\n");
			close(tubo[1]);
			dup2(tubo[0], 0);
			close(tubo[0]);
			execlp("display", "display", NULL);

		} else {				// Proceso Padre
   			fprintf(stdout, "%s%i%s", "Padre, mi hijo es ", pid ," \n");	
			close(tubo[0]);	
			dup2(tubo[1], 1);
 			close(tubo[1]);
			fd = open(argv[i], O_RDONLY);
			while(nleidos = read(fd,buffer,128)) {
				write(1,buffer,nleidos);
			}
			close(1);
			sleep(3);	
			kill(pid, SIGTERM);
		}
	}

}				        				        					 

Ejecución:

AdjuntoTamaño
pinta.c926 bytes