Ben ... Le but de ce code est tout simplement de se familiariser voir d'apprendre/comprendre comment fonctionne un fork() (processus fils et peres) ainsi que l'utilisation d'un tube de communication appelé Pipe ou Tube...
Ce programme aurait pu être écris sans Pipes ni fork()... c'est un prétexte...
Source / Exemple :
/**********************************************************/
/**********************************************************/
/*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);
}
Conclusion :
NB: le code ecrit ci dessus est le même (sauf erreurs de ma part) que celui contenu dans le zip mis à part le fait que les commentaires sont beaucoup plus complets et plus propres dans le zip (ben il a fallu faire avec les contraintes du formulaire de sources alors désolé) :)...
Si jamais j'ai merdé kkpart dites le moi ... c'est mon premier post :)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.