Last active
July 16, 2018 18:29
-
-
Save danielrubango/bf84d95643794b3ae04a3d0b2f62211a to your computer and use it in GitHub Desktop.
Petit programme écrit en C, créant des processus et démontrant l'echange des messages entre processus
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <unistd.h> | |
#include <sys/wait.h> | |
/* Function: decimalVers | |
* --------------------- | |
* Convertit un nombre de base decimale en un autre de base quelconque inférieur à 8 et l'affiche | |
* | |
* n: Nombre à convertir | |
* base: Base de convertion | |
*/ | |
void decimalVers(int n, int base) { | |
// Stocker le nombre binaire | |
int binaire[10000], i = 0; | |
// Conversion | |
while (n != 0) { | |
binaire[i] = n % base; | |
n /= base; | |
i++; | |
} | |
// Affichage | |
for (int j = i-1; j >= 0; j--) { | |
printf("%d", binaire[j]); | |
} | |
printf("\n"); | |
} | |
int main(void) | |
{ | |
// Initialisation | |
pid_t fils1, fils2; | |
int descripteur1[2]; | |
int descripteur2[2]; | |
int somme, a, b; | |
// Descripteurs | |
pipe(descripteur1); | |
pipe(descripteur2); | |
if (pipe(descripteur1) != 0) { | |
fprintf(stderr, "Erreur de creation tube"); | |
return EXIT_FAILURE; | |
} | |
if (pipe(descripteur2) != 0) { | |
fprintf(stderr, "Erreur de creation tube"); | |
return EXIT_FAILURE; | |
} | |
// Creation du premier processus fils 1 | |
fils1 = fork(); | |
if (fils1 == -1) { | |
fprintf(stderr, "Erreur de creation"); | |
return EXIT_FAILURE; | |
} | |
if (fils1 == 0) { // Premier fils | |
printf("Entrez le premier entier, a: "); | |
scanf("%d", &a); | |
printf("Entrez le premier entier, b: "); | |
scanf("%d", &b); | |
somme = a + b; | |
close(descripteur1[0]); | |
close(descripteur2[0]); | |
// Enregistrement de la somme pour envoi au fils et au pere | |
write(descripteur1[1], &somme, sizeof(int)); | |
write(descripteur2[1], &somme, sizeof(int)); | |
printf("____________________________________________________\n"); | |
printf("J'envoie la somme de %d + %d à mon père et mon frère \n", a, b); | |
printf("____________________________________________________\n"); | |
close(descripteur1[1]); | |
close(descripteur2[1]); | |
} else { | |
wait(0); | |
// Creation processus fils 2 | |
fils2 = fork(); | |
if (fils2 == 0) { // Second fils | |
close(descripteur1[1]); | |
int somme1; | |
read(descripteur1[0], &somme1, sizeof(int)); | |
// Verification de la parite | |
if (somme1 % 2) { | |
printf("\nLa somme %d est impaire.\n", somme1); | |
} else { | |
printf("\nLa somme %d est paire.\n", somme1); | |
} | |
printf("La somme reçu par le deuxieme fils a comme valeur octale "); | |
decimalVers(somme1, 8); | |
close(descripteur1[0]); | |
} else { // Pere | |
wait(0); | |
close(descripteur2[1]); | |
int somme2; | |
read(descripteur2[0], &somme2, sizeof(int)); | |
printf("\nLa somme reçu par le pere est %d, qui vaut en binaire ", somme2); | |
decimalVers(somme2, 2); | |
close(descripteur2[0]); | |
} | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment