Nwlapcug.com


Cosa UNIX sistema operativo programmi vengono utilizzati per creare la Named pipe?

Cosa UNIX sistema operativo programmi vengono utilizzati per creare la Named pipe?


Nel sistema operativo Unix, una pipe è un dispositivo di sistema logico che mette in comunicazione due processi Unix. Poiché un tubo trasferisce i dati tra due processi su base First-In-First-Out, essi sono chiamati anche tubi di FIFO. Ci sono due tipi di pipe in Unix..--senza nome e named pipe. Essi sono lo stesso comportamento e semantica tranne che named pipe hanno un nome e una voce nella directory, ad esempio un file. Named pipe offrono il vantaggio di protezione con autorizzazioni di lettura-scrittura, come pure la protezione automatica dal sistema quando sono condivisi da molti processi.

Creare una Named Pipe dalla riga di comando

I programmi "mknod" e "mkfifo" creare una named pipe al prompt della shell. La prima lettera nella voce è "p", che indica che il dispositivo è un tubo. "0666" è la modalità utilizzata, che viene modificato utilizzando il valore corrente di umask. Eseguire il programma "man" per inserimenti manuali dettagliati su "mknod" e "mkfifo" sul sistema. "Mknod" è un comando generico per tutti i tipi di dispositivi.

$ mknod nmpipe_multiway p
OR
$ mkfifo nmpipe_multiway 0666

Vedere il tubo come un elenco di directory:
$ ls -l

Creare una Named Pipe in un programma C

Chiamare il mkfifo() di funzione del sistema di Unix per creare la named pipe in un programma.
Il primo parametro è il nome del tubo e il suo percorso. "Mode" consente di specificare le autorizzazioni di accesso con cui si desidera creare la named pipe. La funzione presuppone la O_CREATE| O_EXCL flag, che significa che vi darà un errore se il tubo è già presente. Un valore restituito pari a zero indica che il tubo è stato creato con successo.

È il prototipo di funzione: int mkfifo (const char * path, mode_t mode);

Aprire la Named Pipe

Chiamare il sistema di Unix funzione Open () o la standard C libreria chiamata fopen () per aprire una named pipe come di sola lettura, sola scrittura o in lettura scrittura, in base al parametro il programma passa. Al contrario, tubi senza nome vengono creati utilizzando la chiamata di tubo (). Comportamento della funzione Open () è la stessa per tutti i dispositivi, inclusi i file. Quando è successo, Open () restituisce un descrittore di periferica e fopen () restituisce il puntatore alla struttura libreria C "FILE". Diversi processi possono leggere e scrivere a named pipe. Se un processo apre la pipe per la lettura, può ospitare fino a un altro processo si apre lo stesso tubo per scrittura e viceversa. Il kernel Unix, o core, risveglia il processo sospeso, non appena si verifica l'evento atteso.

Lettura-scrittura su FIFO

Chiamare le funzioni Read () e Write () per leggere e scrivere a named pipe. Con i tubi, il concetto di FIFO è simile a un processo di scrittura ad una estremità del tubo e un altro processo lettura fuori l'altra estremità. Il numero di processi di lettura potrebbe non essere uguale al numero di processi di scrittura. Se più di un unico processo legge o scrive, i processi di coordinano le operazioni utilizzando gli algoritmi multi-tasking in Unix. Il kernel di Unix tratta i dati in un tubo di come sarebbe trattare i dati dei file. In caso di una named pipe, la modalità in cui viene aperto impone la necessaria sicurezza. Inoltre, named pipe sono automaticamente protetti quando condivisa tra più processi: sincronizzazione per mantenere l'integrità dei dati cade sulla spalla del programmatore quando si utilizzano tubi senza nome.

Gestione dei tubi pieno o vuoti

Se un processo tenta di scrivere dati in un tubo e non c'è spazio, il kernel mette il processo a dormire fino a quando il tubo scrive i dati in archiviazione fisica. Allo stesso modo, un tentativo di leggere da un tubo vuoto mette il processo a dormire fino a quando un altro processo scrive dati alla pipe. In questi casi, il kernel tratta senza nome e named pipe allo stesso modo.

Chiudere una Named Pipe

Chiamare il sistema funzione close () o standard C funzione fclose () per chiudere una named pipe. Chiusura di una named pipe è lo stesso come chiusura di un file ad eccezione del fatto che il kernel segue una procedura speciale prima di rilasciare le risorse occupate dal tubo. Se dorme processi in attesa di leggere il tubo, il kernel di Unix li sveglia e tornano dalla funzione Read () senza dati. Se non sono lettura processi su questo tubo e alcuni processi stanno dormendo in scrittura, il kernel li sveglia e ritornano senza scrittura. Durante la chiusura di una named pipe, il kernel lo tratta come un tubo senza nome per coerenza.