Programmation systeme sous unix avec langage C

Fermé
bramschs Messages postés 1 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 4 janvier 2014 - 4 janv. 2014 à 14:39
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 - 26 janv. 2014 à 18:31
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);

}
A voir également:

2 réponses

Utilisateur anonyme
6 janv. 2014 à 15:35
Salut,

Je n'ai pas trop regardé mais ton code serait beaucoup plus lisible en utilisant les balises de code.
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
26 janv. 2014 à 18:31
il est préférable d'indenté ton code pour que je puisse t'aider
à bientôt
0