În programare, o conductă numită sau o conductă numită ( eng. conductă numită ) este una dintre metodele de comunicare între procese , o extensie a conceptului de conductă în Unix și sisteme de operare similare . O conductă numită permite diferitelor procese să comunice, chiar dacă programele care rulează în acele procese nu au fost scrise inițial pentru a interacționa cu alte programe. Acest concept există și în Microsoft Windows , deși semantica de acolo este destul de diferită. Canalul tradițional este „fără nume”, deoarece există anonim și numai în timp ce procesul rulează. Conducta numită - există în sistem după încheierea procesului. Ar trebui să fie „deconectat” sau scos atunci când nu mai este utilizat. Procesele sunt de obicei atașate unui canal pentru a comunica între ele.
În locul conductei shell tradiționale, fără nume , o conductă numită este creată în mod explicit cu mknod sau mkfifo și două procese diferite se pot referi la el prin nume.
De exemplu, puteți crea o țeavă și puteți seta gzip pentru a comprima ceea ce intră în ea:
teava mkfifo gzip -9 -c < pipe > out &În paralel, într-un alt proces, puteți executa:
pisica fișier > pipeAceasta va comprima datele transmise cu gzip.
Pe Windows, designul conductelor numite este orientată spre interacțiunea client-server și funcționează la fel ca socket -urile : pe lângă citirile și scrierile normale, conductele numite pe Windows acceptă un mod explicit „pasiv” pentru aplicațiile server (pentru comparație: a socket de domeniu UNIX ) . Windows 95 acceptă clienți named pipe, iar sistemele de sucursale Windows NT pot servi și ca servere.
O conductă numită poate fi accesată aproape ca un fișier. Puteți utiliza funcțiile API Windows CreateFile, CloseHandle, ReadFile, WriteFile pentru a deschide și închide un canal, pentru a citi și a scrie. Funcțiile bibliotecii standard C , cum ar fi fopen , fread , fwrite și fclose pot fi, de asemenea, utilizate, spre deosebire de socket-urile Windows , care nu implementează utilizarea operațiunilor standard de fișiere de rețea. Nu există o interfață de linie de comandă (ca în Unix).
Conductele numite nu există permanent și, spre deosebire de Unix, nu pot fi create ca fișiere speciale într-un sistem de fișiere de scris arbitrar, dar au nume temporare (eliberate după ce ultima referință la ele este închisă) care sunt alocate la rădăcina fișierului conductă numită. sistem ( numit sistem de fișiere pipe, NPFS ) și sunt montate pe o cale specială „\\.\pipe\” (adică o conductă numită „ foo ” va avea un nume complet „\\.\pipe\foo”). Conductele anonime utilizate în conducte sunt de fapt numite conducte cu un nume aleatoriu.
Conductele denumite nu sunt de obicei accesibile direct utilizatorului, dar există excepții notabile. De exemplu, instrumentul de virtualizare a stației de lucru VMWare poate deschide un port serial emulat către sistemul gazdă ca o conductă numită, iar depanatorul Microsoft kd la nivel de nucleu acceptă conducte numite ca mesaj de depanare (de fapt, deoarece kd necesită de obicei un serial). conexiune la mașina țintă). , VMware și kd pot fi conectate împreună pentru a depana driverele de dispozitiv de pe același computer). Ambele programe solicită utilizatorului să specifice numele conductelor sub forma „\\.\pipe\ name ”.
Conductele numite în Windows NT pot moșteni un context de securitate.
Named Pipes este, de asemenea, un protocol de rețea în SMB bazat pe utilizarea unei părți speciale a comunicației între procese (IPC). IPC în SMB poate transmite perfect și transparent contextul de autentificare al utilizatorului în cealaltă parte a conductei denumite. Moștenirea de autentificare pentru Windows NT Named Pipes este atât de transparentă pentru utilizator și dezvoltator încât este aproape invizibilă și este adesea înțeleasă greșit.
Comunicarea intraprocesuala | |
---|---|
Metode | |
Protocoale și standarde selectate |