1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/wait.h>
int fils1(), fils2();
int fd[2];
/**********************************/
/* fils 1 : Ecriture dans le tube */
/**********************************/
int fils1()
{
char urli[100];
close(fd[0]);
printf("Saisir une url :\n");
scanf("%s", urli);
write(fd[1], &urli, 100);
close(fd[1]);
exit(0);
}
/******************************************************/
/* fils 2 : Reception des données à la sortie du tube */
/* et utilisation à travers lynx */
/******************************************************/
int fils2()
{
char urlo[100];
close(fd[1]);
read(fd[0], &urlo, 100);
printf("lynx --> %s\n", urlo);
close(fd[0]);
execl( "/usr/bin/lynx", "lynx", urlo, 0);
fprintf (stderr, "execl s'est mal passé...\n");
exit(0);
}
/***********************/
/* Fonction Principale */
/***********************/
int main()
{ /* Processus Pere */
int s, i;
if (pipe(fd) != 0) /* fd devient descripteur de fichier */
{
fprintf(stderr,"Problemes dans l'ouverture de Pipe \n");
exit(1);
}
/* Lancement d'un fils */
if ( fork() == 0 )
{ /* Processus Fils 1 */
fils1();
}
/* Lancement d'un fils */
if ( fork() == 0 )
{ /* Processus Fils 2 */
fils2();
}
close(fd[0]);
close(fd[1]);
fprintf(stderr, "attente de la fin des processus!\n");
i=wait(&s);
i=wait(&s);
printf("fin du programme\n");
exit(EXIT_SUCCESS);
} |
Partager