April 24
Nel sistema operativo Unix, un tubo è un dispositivo di sistema logico che comunica tra due processi Unix. Dal momento che un trasferisce tubo dati tra due processi su base First-In-First-Out, essi sono chiamati anche tubi FIFO. Ci sono due tipi di tubi in Unix - nome e tubi senza nome. Sono gli stessi di comportamento e la semantica eccezione del fatto che named pipe hanno un nome e una voce nella directory, come un file. named pipe offrono il vantaggio di sicurezza con permessi di lettura-scrittura, così come protezione automatica dal sistema quando sono condivisi da molti processi.
I programmi "mknod" e "mkfifo" creare una named pipe al prompt della shell. La prima lettera della voce è "p", indicando che il dispositivo è un tubo. "0666" è la modalità utilizzata, che viene modificato utilizzando il valore corrente di umask. Eseguire il programma di "uomo" per le voci manuali dettagliati su "mknod" e "mkfifo" sul sistema. "Mknod" è un comando generico per tutti i tipi di dispositivi.
$ Mknod nmpipe_multiway p
O
$ Mkfifo nmpipe_multiway 0666
Vedere il tubo come un elenco di directory:
$ Ls -l
Chiama la funzione di sistema Unix mkfifo () per creare la named pipe in un programma.
Il primo parametro è il nome del tubo e il relativo percorso. "Mode" specifica le autorizzazioni di accesso con cui si desidera creare la named pipe. La funzione assume il O_CREATE | bandiere O_EXCL, il che significa che vi darà un errore se il tubo è già esistente. Un valore restituito pari a zero indica che il tubo è stato creato con successo.
Il prototipo di funzione è: int mkfifo (const char * percorso, modalità mode_t);
Chiama la funzione di sistema Unix open () o il C chiamata di libreria fopen standard () per aprire una named pipe in sola lettura, scrittura o solo lettura scrittura, in base al parametro il programma passa. Al contrario, i tubi senza nome vengono creati utilizzando la chiamata pipe (). Comportamento della funzione open () è la stessa per tutti i dispositivi compresi i file. Quando successo, open () restituisce un descrittore di dispositivo e fopen () restituisce il puntatore alla struttura della libreria C "FILE". Diversi processi possono leggere e scrivere la named pipe. Se un processo apre il tubo per la lettura, dorme finché un altro processo apre lo stesso tubo per la scrittura e viceversa. Il kernel Unix, o nucleo, risveglia il processo di sonno, non appena si verifica l'evento atteso.
Richiamare le funzioni read () e write () per leggere e scrivere su named pipe. Con tubi, il concetto FIFO è simile alla scrittura un processo da una estremità del tubo e un altro processo lettura dell'altra estremità. Il numero di lettura processi può non essere uguale al numero di scrittura processi. Se più di un processo di legge o scrive, i processi di coordinare le operazioni utilizzando gli algoritmi multi-tasking in Unix. I Unix kernel tratta i dati in un tubo di come sarebbe trattare i dati dei file. In caso di una pipa denominata, il modo in cui viene aperto fa rispettare necessaria sicurezza. Inoltre, named pipe vengono protetti automaticamente quando condivisa tra più processi: sincronizzazione per mantenere l'integrità dei dati cade sulla spalla del programmatore quando si utilizzano tubi senza nome.
Se un processo tenta di scrivere dati su un tubo e non c'è spazio, il kernel mette il processo di dormire finché il tubo scrive i dati a storage fisico. Allo stesso modo, un tentativo di leggere da un tubo vuoto mette il processo di dormire finché un altro processo scrive i dati al tubo. In questi casi, il kernel tratta nominati e tubi senza nome allo stesso modo.
Chiama la funzione di sistema close () o funzione standard C fclose () per chiudere una named pipe. Chiusura una pipa denominata è lo stesso chiude un file tranne che il kernel segue una procedura speciale prima di rilasciare le risorse occupate dal tubo. Se i processi di sonno sono in attesa di leggere il tubo, il kernel Unix li si sveglia e tornare dalla funzione di lettura () senza alcun dato. Se non ci sono i processi di lettura su questo tubo e alcuni processi dormono sulla scrittura, il kernel li si sveglia e tornare senza scrittura. Mentre la chiusura di un named pipe, il kernel tratta come un tubo senza nome per la coerenza.