Pipe (informatica): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Ianezz (discussione | contributi)
Ianezz (discussione | contributi)
rivisto con precisazioni, aggiungendo esempio di pipeline software da shell
Riga 1:
{{nota disambigua|altri significati per "Pipe"|[[Pipe (disambigua)]]}}
Il termine '''pipe''' ha due significati strettamente correlati tra loro:
Il termine '''pipe''' ha due significati strettamente correlati tra loro: la [[pipe#Pipe come Comunicazione Interprocesso|''pipe'' come comunicazione interprocesso]] è uno strumento di comunicazione tra [[processo (informatica)|processi]] offerto dal [[sistema operativo]], mentre la [[pipe#Funzione pipe nelle shell testuali|funzione ''pipe'']] è una funzionalità delle ''[[shell (informatica)|shell]]'' testuali basata sul precedente.
* indica uno degli strumenti di [[comunicazione tra processi]] offerti dal [[sistema operativo]];
* indica una funzionalità delle ''[[shell (informatica)|shell]]'' testuali basata sul precedente.
 
== Pipe come Comunicazionestrumento di comunicazione tra processi Interprocesso==
Nei sistemi operativi una '''pipe''' è uno degli strumenti didisponibili [[comunicazione interprocesso]] che consentono diper far fluirecomunicare untra flussoloro di dati da undei [[processo (informatica)|processoprocessi]] ad un altro. Le ''pipe'', diversamente dai ''[[socket (reti)|socket]]'', sonooffrono monodirezionaliun canale di comunicazione monodirezionale, e quindi occorre impiegarne due per ottenere una comunicazione bidirezionale tra processi occorre impiegarne due.
 
Nei sistemi operativi [[Unix]] e [[Unix-like]] una ''pipe'' è usabile tramite una coppia di [[descrittore di file|descrittori di file]], uno per scrivere dati e l'altro per leggereleggerli. Un processo crea una ''pipe'' tramite la [[chiamata di sistema]] [[pipe(2)]], che ritorna i due descrittori di file.
 
In maniera analoga, nei sistemi operativi [[Microsoft_Windows|Microsoft Windows]] una ''pipe'' convenzionale è denominata '''anonymous pipe''' ed è usabile tramite una coppia di [[HANDLE]]: il primo per la scrittura dei dati, il secondo per la lettura. Per creare una ''anonymous pipe'' va usata la chiamata di sistema [[CreatePipe]].
Line 27 ⟶ 29:
 
==Funzione pipe nelle shell testuali ==
Nelle ''[[shell (informatica)|shell]]'' testuali di molti sistemi operativi (tra cui i sistemi Unix e Unix-like, MS-DOS e Microsoft Windows) esiste una ''funzioneapposita pipe'' usatasintassi per combinare tra loro con una ''pipe'' due programmi semplici, in modo da realizzare una elaborazione complessa in cascata senza l'uso di [[file]] temporanei (e quindi adatta ad esempio a grandi volumi di dati).
 
Il carattere utilizzato nella sintassi (la [[barra verticale]]: <code>|</code>) è detto per l'appunto ''pipe'', e viene inserito tra le invocazioni di due o più programmi per indicare al sistema che i dati diretti allo ''[[standard output]]'' del primo programma precedente debbono essere inviati allo ''[[standard input]]'' del secondoprogramma programmasuccessivo.
 
Ad esempio, nei sistemi Unix e Unix-like, la linea di comando che segue legge il file <code>file.txt</code> tramite il comando [[cat (Unix)|cat]], che invia i dati al comando [[tr (Unix)|tr]] per sostituire gli spazi ed i segni di punteggiatura con il carattere di ritorno a capo; a sua volta esso passa il risultato al comando [[sort (Unix)|sort]] per ordinare le linee, che lo passa al comando [[uniq]] per scartare le linee duplicate, ottenendo così un elenco ordinato alfabeticamente delle parole contenute nel file:
Una sequenza di comandi uniti con le ''pipe'' è detta ''[[pipeline software]]''.
cat file.txt | tr '[[:space:][:punct:]]' '\n' | sort | uniq
 
Una sequenza di comandi uniti con le ''pipe'' come quella sopra esposta è detta ''[[pipeline software]]''.
 
Un programma progettato per lavorare leggendo dati dallo ''standard input'' e producendo il risultato sullo ''standard output'' è detto [[Filtro (Unix)|filtro]].