[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

exemple Re: [linux] pipes




En C voici un truc du genre, tu peux voir dans l'exemple l'utilisation d'un simple echo. Si qui montre l'utilité même d'un "pipe nommé".
Dans ce cas le masque de permission du pipe nommé est hérité du UID/GID
du process.
On pourrait avoir aussi la possibilité d'utiliser mkfifo en ligne de commande et faire un bete exemple en shell.

Mais bon, je ne sais pas ce que tu veux faire mais les pipes nommés peuvent servir dans certains cas. Il faut voir ce que tu veux faire
comme application et quelles sont tes buts.

Sinon n'oublie pas les sockets...

N'oublie pas les bibles :

Richard Stevens, UNIX Network Programming, Volume 1, Second Edition: Networking APIs: Sockets and XTI, Prentice Hall, 1998, ISBN 0-13-490012-X.

Richard Stevens, UNIX Network Programming, Volume 2, Second Edition: Interprocess Communications, Prentice Hall, 1999, ISBN 0-13-081081-9.
(tiens on parle des FIFOs dans celui là 8-)))

Si tu te lances dans les Sockets, je te conseille aussi cette autre
bible (du même auteur postum) :

Richard Stevens, TCP/IP Illustrated, Volume 1: The Protocols, Addison-Wesley, 1994, ISBN 0-201-63346-9.

Hope this helps

Alx



#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <limits.h>
#include <sys/types.h>
#include <sys/stat.h>
main()
{
int rc;
int fifofd;
char input[255];
rc = mkfifo("ungrospipe", S_IRUSR | S_IWUSR);
if (rc != 0) {
perror("mkfifo failure");
exit(EXIT_FAILURE);
}
/* Open the FIFO for read. */
fifofd = open("ungrospipe", O_RDONLY);
if (fifofd < 0){
perror("open failure");
remove("ungrospipe");
exit(EXIT_FAILURE);
}
/* Using the FIFO with a simple echo. */
rc = system("echo >ungrospipe "
"sending a message");
if (rc != 0) {
fprintf(stderr, "error on echo %dn", rc);
remove("ungrospipe");
exit(EXIT_FAILURE);
}
rc = read(fifofd, input, _POSIX_PIPE_BUF);
if (rc < 0) {
perror("read failure");
remove("ungrospipe");
exit(EXIT_FAILURE");
}
puts("Here it is the message :");
fwrite(input, 1, rc, stdout); /* Read input from the FIFO. */
close(fifofd);
remove("ungrospipe");
exit(EXIT_SUCCESS);
}


J-C Hendrickx wrote:


Merci, mais le man et info ne donnent pas un exemple pratique;
Si vous avez déjà utilisé FIFO, ce serait chouette de me
filer un exemple.
Pourquoi l'utilise-t-on. Comment. Genre "Hello world"
Ou bien c'est le monstre du loch Ness ?
Ou bien j'oublie ça.

Linux ad fundum.


--- Message original de Alexandre Dulaunoy le dim 25 mar, 2001 à 00:57:22 +0100 ---

On Sat, 24 Mar 2001, Laurent Frisee wrote:


J-C Hendrickx wrote:


Bonjour,

Quelqu'un pourrait-il m'éclairer sur ce qu'est et comment
utiliser un _pipe nommé_ ?
J.C.H

wi, c'est un moyen de communiquer entre 2 pc sous windows. Si je me
rappelle bien, tu ne peux en créer qu'un sur une machine NT mais tu peux
te connecter depuis n'importe quel windows. Je sais pas pour les windows
2000 et Me.

Hein quoi ? un "named pipe" (pipe nomme) est une FIFO. Un pipe n'est pas
nomme et il est uniquement utilise dans le cas ou du meme process parent. Parcontre une FIFO (ou pipe nomme) est aussi half-duplex comme le
pipe mais il a l'avantage d'avoir un "path" unix standard ce qui permet de
l'atteindre facilement a partir de n'importe quel autre process via un
bete open.
Comment creer un pipe nomme (FIFO), tu utilise l'appel mkfifo (cf. man).
Par contre comme c'est half-duplex, il faut souvent creer un pour la
lecture et un l'ecriture.
Laurent je ne vois pas le rapport avec Windows ? Tu ne confonds pas avec
les fonctionnalites dans le protocol NetBIOS.
hope this helps.
alx
----
Alexandre Dulaunoy
AD993-RIPE
AJDD1-6BONE
http://www.foo.be/



[ Soyez précis dans vos sujets svp afin de déterminer directement  ]
[ le type de demande...                                            ]
[ Pour vous (dés)inscrire, aller sur http://linuxbe.org/ml.php     ]
[ http://LinuxBe.org              Contact: listmaster@linuxbe.org  ]

[ Soyez précis dans vos sujets svp afin de déterminer directement  ]
[ le type de demande...                                            ]
[ Pour vous (dés)inscrire, aller sur http://linuxbe.org/ml.php     ]
[ http://LinuxBe.org              Contact: listmaster@linuxbe.org  ]