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 ?
Version imprimable
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:$ mknod montube p
… avec « p » pour « pipe », ou plus simplement :
Code:$ mkfifo montube
… puis depuis l'autre terminal, saisis ceci :
Code:
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:$ echo Bonjour > montube
… puis ceci dans le second :
Code:
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 :D !
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:
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 ^^
non pas du tout :o ! il faut ajouter un PATH ?
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 ^^
ok merci ! je vais essayer tout ça !!