Quasi tutto in Linux può essere considerato un file , ma la differenza principale tra un file normale e una pipe con nome è che una pipe con nome è un'istanza speciale di un file che non ha contenuti sul filesystem.
Ecco la citazione da man fifo
:
Un file speciale FIFO (una pipe denominata) è simile a una pipe, tranne per il fatto che è accessibile come parte del filesystem. Può essere aperto da più processi per la lettura o la scrittura. Quando i processi scambiano dati tramite FIFO, il kernel passa internamente tutti i dati senza scriverli nel filesystem. Pertanto, il file speciale FIFO non ha contenuti sul filesystem; la voce del filesystem funge semplicemente da punto di riferimento in modo che i processi possano accedere alla pipe usando un nome nel filesystem.
Il kernel mantiene esattamente un oggetto pipe per ogni file speciale FIFO che viene aperto da almeno un processo. Il FIFO deve essere aperto su entrambe le estremità (lettura e scrittura) prima che i dati possano essere passati. Normalmente, aprendo i blocchi FIFO fino all'apertura dell'altra estremità.
Quindi in realtà una named pipe non fa nulla fino a quando qualche processo non legge e scrive su di essa. Non occupa spazio sul disco rigido (tranne un po 'di meta informazioni), non utilizza la CPU.
Puoi verificarlo facendo questo:
Crea una pipa denominata
$ mkfifo /tmp/testpipe
Vai ad alcune directory, ad esempio /home/user/Documents
, e gzip tutto al suo interno, usando il nome pipe.
$ cd /home/user/Documents
$ tar cvf - . | gzip > /tmp/testpipe &
[1] 28584
Qui dovresti vedere il PID del processo gzip. Nel nostro esempio era 28584.
Ora controlla cosa sta facendo questo PID
$ ps u -P 28584
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
c0rp 28584 0.0 0.0 29276 7800 pts/8 S 00:08 0:00 bash
Vedrai che non utilizza risorse . 0% di utilizzo della CPU, 0% di utilizzo della memoria.
Verifica la comprensione dell'utilizzo dello spazio file
$ du -h /tmp/testpipe
0 testpipe
E ancora 0
niente. Il testpipe può essere riutilizzato se necessario.
Non dimenticare di uccidere gzip, usando kill -15 28584
. E rimuovi la nostra pipa denominata usandorm /tmp/testpipe
Esempi di utilizzo
Puoi reindirizzare quasi tutto utilizzando la pipe denominata. Ad esempio puoi vedere questo proxy a una riga .
Anche qui c'è un'altra bella spiegazione sull'uso della pipe con nome. È possibile configurare due processi su un server per comunicare utilizzando una pipe denominata anziché lo stack TCP / IP. È molto più veloce e non carica risorse di rete. Ad esempio, il tuo server Web può comunicare direttamente con il database utilizzando una pipe denominata, anziché utilizzare l' localhost
indirizzo o ascoltare una porta.