Un tubo è un mezzo per la comunicazione tra i processi. Un processo scrive i dati sul tubo e un altro processo legge i dati dal tubo. In questo articolo, vedremo come viene utilizzata la funzione pipe () per implementare il concetto usando il linguaggio C.
Su pipe
Nel tubo, i dati vengono mantenuti in un ordine FIFO, il che significa scrivere dati a un'estremità del tubo in sequenza e leggere i dati da un'altra estremità del tubo nello stesso ordine sequenziale.
Se un processo si legge dal tubo, ma nessun altro processo non ha ancora scritto nel tubo, quindi leggi restituisce la fine del file. Se un processo vuole scrivere su un tubo, ma non c'è altro processo collegato al tubo per la lettura, allora questa è una condizione di errore e il tubo genera un segnale di sigipe.
File di intestazione
#includereSintassi
INT Pipe (Int Filedes [2])argomenti
Questa funzione prende un singolo argomento, un array di due numeri interi (Deniugerati). Filedes [0] viene utilizzato per la lettura dal tubo e Filedes [1] è usato per scrivere sul tubo. Il processo che vuole leggere dal tubo dovrebbe chiudere Filedes [1], e il processo che vuole scrivere sul tubo dovrebbe chiudere Filedes [0]. Se le estremità non necessarie del tubo non sono esplicitamente chiuse, allora la fine del file (EOF) non verrà mai restituito.
Valori di ritorno
Sul successo, il tubo() restituisce 0, per errore la funzione restituisce -1.
Patorialmente, possiamo rappresentare il tubo() funzione come segue:
Di seguito sono riportati alcuni esempi che descrivono come utilizzare la funzione del tubo in lingua.
Esempio 1
In questo esempio, vedremo come funziona la funzione del tubo. Anche se usare un tubo in un singolo processo non è molto utile, ma avremo un'idea.
// Esempio 1.CQui abbiamo creato per la prima volta un tubo usando tubo() funzione quindi scritta sul tubo usando Fildes [1] FINE. Quindi, i dati sono stati letti usando l'altra estremità del tubo, che è Filedes [0]. Per leggere e scrivere al file, eravamo soliti Leggere() E scrivere() funzioni.
Esempio2
In questo esempio, vedremo come comunicare i processi dei genitori e dei figli usando il tubo.
// Esempio2.CInnanzitutto, è stato creato un tubo utilizzando la funzione del tubo, quindi è stato biforcato. Quindi, il processo del bambino chiude l'estremità di lettura e scrive sul tubo. Il processo genitore chiude la fine della scrittura e legge dal tubo e la visualizza. Qui il flusso di dati è solo un modo che va da figlio a genitore.
Conclusione:
tubo() è una potente chiamata di sistema in Linux. In questo articolo, abbiamo visto solo un flusso di dati a senso unico, un processo scrive e un altro processo recita, creando due tubi che possiamo ottenere anche il flusso di dati bidirezionali.