Bonsoir bonsoir,
Je vous explique mon problème, je dois réaliser, en cours de c, deux programmes communiquant avec un tube nommée.
L'un "serveur" et l'autre "client", voici leur fonctionnement :
- Le serveur crée un tube dans le système de fichiers, nommé /tmp/fifo. Il ouvre ensuite ce tube en lecture,
puis le rouvre sous forme de flux en attendant des textes envoyés par le client.
- Le client essaye d'ouvrir en écriture seule le tube crée par le serveur. S'il n'existe pas, le processus client
se termine.
- Le client envoie au serveur un texte entré par l'utilisateur comme argument au programme, et il se termine.
- Le serveur affiche à écran le texte envoyé par le client, et il reste en attente d'autres messages.
Le résultat attendu :
Dans un terminal :
$ ./client bonjour
$ ./client "comment aller vous?"
$ ./client "y a t il quelqu un?"
Dans un deuxième :
$ ./serveur
>>> bonjour
>>> comment aller vous?
>>> y a t il quelqu un?
( On doit, pour réaliser ces programmes, utiliser les fonctions suivantes : mkfifo, unlink, fopen, fputs, fgets, fclose)
Voici le code que j'ai réalisé :
Code du Serveur :
Code du Client :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 int main(int argc, char ** argv) { unlink("/tmp/fifo"); FILE* tube = NULL; char text[20]; mkfifo("/tmp/fifo",0666); while (1) { tube = fopen("/tmp/fifo","r"); fgets(text,20,tube); printf(">>>>> %s",text); fflush(stdout); fclose(tube); } return 0; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 int main(int argc, char * argv[]) { FILE* tube = NULL; if (fopen("/tmp/fifo","r")==NULL) exit(0); tube = fopen("/tmp/fifo","w"); fputs(argv[1],tube); fclose(tube); return 0; }
...Et donc ça ne marche pas..
Bizarre puisque lorsque je tente d'écrire dans le tube "manuellement" avec "cat > /tmp/fifo" " là tout marche bien..
Voila voila je solicite donc votre aide pour avoir une petite piste
Bonne soirée et merci !
Partager