programmation systeme sous unix avec langage C
Bonjour,
Je suis nouveau en programmation système et j'essaye de résoudre un exercice mais je n'arrive pas vraiment a le faire... alors j'ai besoin de votre aide svp ! :)
l'énoncé : suite de syracus
après avoir fait un fork et crée 2 tube , l'utilisateur va entré un nombre :
le fils commence : si le nombre%2!=0 alors il fait nombre=nombre*3+1 jusqu'a ce qu'il ait un résultat pair et le passe au pere via un tube.
ensuite le pere : si nombre%2==0 alors nombre=nombre/2 jusqu'a ce qu'il ait un nombre impaire et le passe au fils via un tube , et ainsi de suite jusqu'a 1.
mon premier essai :
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/types.h>
void handler (int sig){}
main (int argc , char*argv[] ) {
int tube1[2]; int tube2[2];
int n=atoi(argv[1]), x , pid;
int p = pipe(tube1),p2=pipe(tube2);
signal(SIGUSR1,handler);
pid=fork();
do{
if(pid==0) {
close(tube2[1]);
read(tube2[0],&n,sizeof(int));
close(tube2[0]);
while(n%2!=0) {n=n*3+1;
printf("\n fils : %d",n);
if(n==1) exit(0);}
close(tube1[0]);
write(tube1[1],&n,sizeof(int));
close(tube1[1]);
kill(getppid(),SIGUSR1); pause();
}else {
close(tube1[1]);
read(tube1[0],&n,sizeof(int));
close(tube1[0]);
printf("\n père: %d",n);
while(n%2==0) {n=n/2;
printf("\n père : %d",n);
if (n==1) exit(0);
}
close(tube2[0]);
write(tube2[1],&n,sizeof(int));
close(tube2[1]);
kill(pid,SIGUSR1);
}
}while(1);
}