FIFO (named pipe)
Le FIFO sono delle pipe con un nome associato (un nome di file nel file system).
Una FIFO può essere creata da terminale con il comando mkfifo e cancellata con il comando rm.
$ mkfifo tubo
$ ls –l tubo
prw-rw-r-- 1 valeria valeria 0 Mar 24 13:40 tubo
$ rm tubo
− Una FIFO è quindi un file speciale che esiste nel file system ed è riconoscibile dal marcatore p nell’output del comando ls –l.
− Le FIFO sono persistenti, devono quindi essere rimosse esplicitamente.
− Poiché hanno un nome potranno essere utilizzate per la comunicazione tra processi che NON sono in correlazione gerarchica (padre/figlio).
− Sulle FIFO si effettuano le stesse operazioni di un file ad accesso sequenziale (apertura, lettura/scrittura, chiusura) MA i dati letti vengono rimossi
Nei programmi C la creazione di una FIFO può avvenire utilizzando la funzione mkfifo() che crea una nuova FIFO oppure restituisce un errore se la FIFO esiste già. Una FIFO può essere eliminata utilizzando la funzione unlink.
L’accesso alla FIFO avverrà dopo la sua apertura che può essere fatta con la fopen, specificandone il nome e se il programma vorrà leggere o scrivere sulla FIFO, al termine si userà la fclose per la chiusura della FIFO. Le operazioni di lettura /scrittura potranno essere fatte usando le funzioni C di I/O.
Di default l’ apertura di una FIFO è bloccante: un processo che tenta di aprirla in lettura (o scrittura) viene bloccato fino a quando un altro processo non la apre in scrittura (o lettura).
Ogni FIFO deve avere sia un lettore che uno scrittore: se un processo tenta di scrivere su una FIFO che non ha un lettore esso riceve il segnale SIGPIPE da parte del kernel.
⇒ Vedere gli esempi fifo-write.c e fifo-read.c