Che UNIX operativo programmi di sistema sono usati per creare named pipe?

April 24

Che UNIX operativo programmi di sistema sono usati per creare named pipe?


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.

Creare un named pipe Alla riga di comando

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

Creare una named pipe in un programma C

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);

Aprire la named pipe

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.

Read-Write on FIFO

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.

Gestione Tubi pieno o vuoto

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.

Chiudere una named pipe

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.