Bonjour,
Je rencontre un petit problème avec les Pipes...
Est-ce possible de faire communiquer 2 processus qui ne ce connaissent pas avec un Pipe ?
Bonjour,
Je rencontre un petit problème avec les Pipes...
Est-ce possible de faire communiquer 2 processus qui ne ce connaissent pas avec un Pipe ?
Bonjour,
Oui, c'est possible avec un « tube nommé » (named pipe), en tout cas sous Unix (ou Linux), car s'ils existent également sous Windows, leur sémantique est légèrement différente. L'idée est justement de définir un point de rencontre pour ces deux processus qui ne se connaissent pas encore et cela se fait, comme traditionnellement sous Unix, via le système de fichiers.
Ouvre deux terminaux côte à côte sur ton écran et assure-toi d'être dans le même répertoire des deux côtés, puis crée le tube dans le premier avec :
Code Shell : Sélectionner tout - Visualiser dans une fenêtre à part $ mknod montube p
… avec « p » pour « pipe », ou plus simplement :
Code Shell : Sélectionner tout - Visualiser dans une fenêtre à part $ mkfifo montube
… puis depuis l'autre terminal, saisis ceci :
Code Shell : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $ ls -l montube prw-rw-r-- 1 user user 0 16 juin 16:05 montube
Le « p » initial indique qu'il s'agit bien d'un tube nommé et pas d'un fichier ordinaire.
De là, tape ce qui suit dans le premier terminal :
Code Shell : Sélectionner tout - Visualiser dans une fenêtre à part $ echo Bonjour > montube
… puis ceci dans le second :
Code Shell : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $ cat montube Bonjour
On voit alors que ce qui a été écrit dans le premier tube a mis le premier processus en attente et que le second a pu lire ce qui avait été envoyé par le premier, en suivant exactement le même mécanisme que si tu avais créé un tube anonyme avec pipe(). Au point de vue de la programmation C, il s'agit de fichiers ordinaires que tu peux ouvrir normalement avec open() ou fopen(). Le programme n'aura alors même pas conscience qu'il s'agit de tubes.
Merci beaucoup !!
exactement ce que je cherche!
Bonjour,
J'essaye de mettre en place un tube nommé sous Windows en C.
voila mon code :
mon problème est le suivant : mkfifo n'est pas définis ... j'ai essayer d'ajouter des includes mais rien ne fonctionne...
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
24 #include <sys/stat.h> #include <sys/types.h> #include "io.h" #include <process.h> #include <stdio.h> int main(int argc, const char* argv[]) { int fd; char * myfifo = "./myfifo"; /* create the FIFO (named pipe) */ int status = mkfifo(myfifo, 1); /* write "Hi" to the FIFO */ fd = open(myfifo, O_WRONLY); write(fd, "Hi", sizeof("Hi")); close(fd); /* remove the FIFO */ unlink(myfifo);
quelqu'un aurai une solution pour moi svp?!
Est-ce que tu as bien redéfini/ajouté le PATH? Ca pourrait être une des raisons pour lesquels il ne trouve pas mkfifo ^^
Je ne suis pas sûr, mais étant donné que tu programmes sous Windows, il y a de grandes chances pour que ce soit la raison du problème.
Essaie peut être dans un premier temps d'inclure le nom absolu de ton fichier stat.h, et ensuite si ça fonctionne rajoute un PATH, ce sera plus générique.
Et si jamais ça ne marche toujours pas, regarde j'ai trouvé ce lien:
https://en.wikipedia.org/wiki/Named_pipe
Ca explique les tubes nommés sous Unix et sous Windows ^^
Partager