- /**********************************************************/
- /**********************************************************/
- /*PROGRAMME SUR L'UTILISATION DE PIPES/TUBES ET DE FORK() */
- /**********************************************************/
- /*But : Ecrire dans un pipe/tube de communication une url */
- /*(adresse internet) qui devra être lancée a l'aide de */
- /*lynx par un autre processus */
- /**********************************************************/
-
- #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);
- }
-
-
/**********************************************************/
/**********************************************************/
/*PROGRAMME SUR L'UTILISATION DE PIPES/TUBES ET DE FORK() */
/**********************************************************/
/*But : Ecrire dans un pipe/tube de communication une url */
/*(adresse internet) qui devra être lancée a l'aide de */
/*lynx par un autre processus */
/**********************************************************/
#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);
}