Ricerca tra la vecchia roba

Comunicazione fra processi e “non aprite quello STREAM”

Posted: Agosto 30th, 2008 | Author: | Filed under: Ci, Programmazione | Commenti disabilitati su Comunicazione fra processi e “non aprite quello STREAM”

Quello che segue è un esempio di codice in cui viene utilizzato l’output di un programma come input di quello principale; viene utilizzato un sistema di pipe(7) per far comunicare la coppia di processi che si originano in seguito ad una fork(2): in particolare questo programma prende come argomento il nome di un file e ne restituisce il checksum effettuatto attraverso il commando da shell md5sum(1). Il codice lo trovate qui.

Quest’altro invece mette in risalto una caratteristica di un sistema operativo nel trattare i file descriptor, cioè gli indici che internamente vengono usati per tenere conto dei file aperti; i file descriptor sono molto importanti siccome nella filosofia degli Unix è che ogni cosa è vista come un file ed in particolare ogni programma al suo avvio ha almeno tre file descriptor (o stream nella terminologia dell’ANSI C) lo standard input, output ed error. Il problema che si può avere è che chiudendo questi file descriptor all’avvio del programma, un eventuale successiva apertura di un file andrebbe ad occupare quelli che precedentemente erano collegato con gli stream standard citati precedentemente (il sistema restituisce il primo file descriptor libero) e se magari avete una routine di logging che cerca di scrivere su qualche stream che pensa aperto, le conseguenze potrebbero essere belle bastarde. Il codice può farvi capire quello che sto cercando di spiegare.


Comments are closed.