[C] Pipe/Fork

Fermé
Apaachee Messages postés 248 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 25 août 2011 - 6 juin 2009 à 10:31
Apaachee Messages postés 248 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 25 août 2011 - 6 juin 2009 à 12:16
Bonjour,
Je dois réaliser un programme en C dont le but est de créer (N-1) fils issus d'un même père et dont chacun d'entre eux est relié par un tube.
Le père transmet un entier au premier fils et cet entier devra parcourir tous les fils ensuite grâce aux tubes en l'incrémentant dans chaque passage dans un fils.

Je suis vraiment perdu pour le code et pour les pipes...
A voir également:

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
6 juin 2009 à 12:04
Salut,
Déjà, tu peux commencer par faire le même exercice avec un seul fils (un seul fork).
Donc le père envoie un nombre à son fils, et son fils l'affiche (ne serait-ce que pour vérifier que ça marche ^^).
Voici un exemple de pipe : https://tldp.org/LDP/lpg/node11.html Tu peux t'en inspirer largement.
Une fois que t'aurais réussi, tu pourras passer à la création de plusieurs fils.
N'hésite pas à poster ton code ou/et à poser des questions techniques si tu as besoin d'aide.

Cdlt
0
Apaachee Messages postés 248 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 25 août 2011 47
6 juin 2009 à 12:16
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>

int main(){
	int num_proc = 0;
	int nb_proc = 10;
	int essai;
	pid_t pid;

	do{
		essai=0;
		do{
			pid = fork();
			essai ++;
		}while ((pid == -1)&&(essai<100));

		if(essai!=100 && pid!=0){
			num_proc++;
		}
		else if(pid==0){
			
			printf("num_proc : %d \n",num_proc);
			pid = getpid();
			_exit(pid);
		}
	}while ((pid!=0) && (num_proc<=nb_proc));
}


J'ai créé mes N processus, ne reste plus qu'à leur transmettre une variable incrémentée. (ton lien a l'air mort je ne vois pas ton exemple :S)
0