Fork et Pipe [C] - C - Programmation
Marsh Posté le 06-06-2009 à 15:50:48
Salut
man 2 pipe
Citation : EXAMPLE
|
Dis nous précisément ce que tu ne comprends pas, difficile d'aider quelqu'un qui dit juste qu'il n'y arrive pas.
Marsh Posté le 07-06-2009 à 10:49:45
apaachee a écrit : |
Il y a 2 façons de faire un pipe
1) un fichier pipe sur disque puis un processus y écrit et un autre le lit
2) un pipe entièrement en mémoire. Cette 2° façon est limitée aux seuls processus liés père/fils (mais c'est possible puisque c'est ton cas)
Donc à toi de choisir quelle façon faire puisque t'as possibilité de faire les deux. Perso je choisirais la 2° puisque ça m'évite de m'embêter à créer un fichier.
Donc la technique de base pour communiquer entre un père et son fils
1) le programme commence par créer le pipe mémoire grace à la fonction pipe() à laquelle il passe un int tab[2]
Cette fonction se charge de créer le pipe et d'allouer tab[0] comme point de lecture et tab[1] comme point d'écriture
2) le programme génère son fils grace à fork(). Le fils reçoit donc une copie de la mémoire du père donc de tab
3) le processus qui devra écrire ferme tab[0] et celui qui devra lire ferme tab[1]
4) celui qui écrit fait du write(tab[1], zone, nb_octets) et celui qui doit lire fait du read(tab[0], zone, nb_octets)
5) une fois que c'est fini, chaque processus ferme son tab[x] utilisé
Pour toi qui doit faire "n" fils, t'auras besoin de "n" tab[2] donc int tab[n][2]. Ca risque de devenir galère. C'est pourquoi je te conseillerais de définir un type t_pipe
Code :
|
Comme ça, tu n'as plus qu'à créer un t_pipe pipe[n] puis chaque fils "x" ira lire dans pipe[x - 1].cote[0] et écrire dans pipe[x].cote[1] (enfin j'espère que tu vois le principe)
Petite doc sur les pipes: http://fr.lang.free.fr/cours/Processus_Csyst_v1.0.pdf
Marsh Posté le 06-06-2009 à 11:50:33
Bonjour à tous =)
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.
Voici le programme qui créé un nombre x de processus :
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
Comment rajouter les pipes dans ce programme ? Les documentations que j'ai lu, je n'ai pas comprit grand chose ...