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);

}

2 réponses

  1. Salut,

    Je n'ai pas trop regardé mais ton code serait beaucoup plus lisible en utilisant les balises de code.
    1. il est préférable d'indenté ton code pour que je puisse t'aider
      à bientôt