128 votes

Quels sont les tuyaux nommés?

Que sont-ils et comment fonctionnent-ils?

Le contexte se trouve être SQL Server

145voto

Toybuilder Points 4143

À la fois sur Windows et POSIX systèmes de canaux nommés fournir un moyen de communication inter-processus de se produire parmi les processus en cours d'exécution sur la même machine. Quels canaux nommés à vous donner, c'est une façon d'envoyer vos données sans avoir les performances de la participation de la pile réseau.

Tout comme vous avez un serveur qui écoute une adresse IP/port pour la réception des demandes, un serveur peut également définir un canal nommé qui peut écouter les demandes. Dans les deux cas, le client (ou le DB bibliothèque d'accès) doit connaître l'adresse (ou le nom de canal) pour envoyer la requête. Souvent, une norme communément utilisé par défaut existe (un peu comme le port 80 pour HTTP, SQL server utilise le port 1433 dans TCP/IP; \\.\pipe\sql\requête pour un tube nommé).

Par la mise en place de nouvelles canalisations, vous pouvez avoir plusieurs serveurs de DB en cours d'exécution, chacune avec sa propre demande des auditeurs.

L'avantage de canaux nommés est qu'il est généralement beaucoup plus rapide, et libère de la pile réseau de ressources.

-- BTW, dans le monde Windows, vous pouvez également avoir nommé canaux à distance des machines, - mais dans ce cas, le tube nommé est transporté au-dessus de TCP/IP, si vous perdez de la performance. L'utilisation de canaux nommés pour la machine locale de communication.

39voto

MarkR Points 37178

Unix et Windows à la fois les choses ont appelé "tuyaux", mais ils se comportent différemment. Sur Unix, un tube nommé est une rue à sens unique qui a généralement juste un lecteur et un écrivain de l'écrivain écrit, et le lecteur lit, vous l'obtenir?

Sur Windows, la chose qui s'appelle un "tube Nommé" est un objet IPC plus comme un socket TCP - les choses peuvent circuler dans les deux sens et il y a certaines métadonnées (Vous pouvez obtenir les informations d'identification de la chose sur l'autre extrémité, etc).

Unix canaux nommés apparaissent comme un fichier spécial dans le système de fichiers et peut être consulté avec le fichier normal IO commandes, y compris la coquille. Windows ce qui n'est pas le cas, et doivent être ouverts avec un système spécial d'appel (à la suite duquel ils se comportent la plupart du temps comme un normal win32 poignée).

Encore plus de confusion, Unix a quelque chose qui s'appelle un "socket Unix" ou AF_UNIX socket, qui fonctionne plus comme (mais pas complètement) win32 "tube nommé" bidirectionnel.

22voto

John Mulder Points 3716

Linux Tuyaux
Premier entré Premier Sorti (FIFO) interproccess mécanisme de communication.

Sans Nom Tuyaux
Sur la ligne de commande, représenté par un "|" entre les deux commandes.

Les Canaux Nommés
Une FIFO fichier spécial. Une fois créée, vous pouvez utiliser le tuyau juste comme un fichier normal(ouvrir, fermer, écrire, lire, etc).

Pour créer un tube nommé, appelé "myPipe", à partir de la ligne de commande (page de man):

mkfifo myPipe

Pour créer un tube nommé à partir de c, où le "chemin" est le nom que vous souhaitez le tuyau d'avoir et de "mode" contient les autorisations que vous souhaitez le tuyau d'avoir (man page):

#include <sys/types.h>
#include <sys/stat.h>
int mkfifo(const char *pathname, mode_t mode);

16voto

Jonathan Lonowski Points 45253

Selon Wikipedia:

[...] D'un canal classique est "sans nom", car il existe de manière anonyme et persiste tant que le processus est en cours d'exécution. Un tube nommé est le système persistant et existe au-delà de la durée de vie de la procédure et doit être "déconnecté" ou supprimé une fois qu'il n'est plus utilisé. Processus généralement attacher le tube nommé (apparaissant généralement comme un fichier) pour effectuer IPC (inter-process communication).

11voto

John Nilsson Points 4650

Comparer

 echo "test" | wc
 

à

 mkdnod apipe p
wc apipe
 

wc va bloquer jusqu'à

 echo "test" > apipe
 

exécute

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X