QNA > C > Cosa Sono I Sigpipe?

Cosa sono i SIGPIPE?

SIGPIPE è il segnale di "tubo rotto", che viene inviato a un processo quando tenta di scrivere su un tubo la cui estremità di lettura si è chiusa (o quando tenta di scrivere su un socket che non è più aperto in lettura), ma non viceversa. L'azione predefinita è di terminare il processo.

Questo comportamento è utile per i casi tipici di processi in esecuzione in pipeline. Se eseguite foo | bar, allora non vedrete mai l'output di foo direttamente--diventa l'input di bar e vedrete l'output di bar. Questo significa che se, per esempio, bar muore, allora non ha senso che foo continui a produrre output. Questo può accadere sia perché bar ha fallito, o perché non ha più bisogno di input (per esempio, se sta scansionando il suo input per assicurarsi che non ci siano errori, può fermarsi dopo aver trovato il primo).

Immaginate cosa accadrebbe se SIGPIPE non esistesse, e bar morisse (a causa di un errore o perché ha semplicemente deciso di uscire). foo continuerebbe a funzionare, e dovrebbe ricevere un codice di errore al tentativo di scrivere. Potrebbe ignorarlo e continuare a funzionare, lasciando l'utente senza alcuna indicazione ovvia che la possibile condizione anormale di bar che termina per prima si è verificata. Quando pippo viene ucciso da SIGPIPE, la shell lo rileverà usando una delle funzioni wait(), e stamperà un messaggio "Broken pipe" o simile.

D'altra parte, se pippo muore per primo, questo è il solito caso; chiude l'estremità di scrittura, e quindi bar raggiungerà semplicemente EOF, e terminerà normalmente.

Di Kariotta

Come trasferire fondi da una carta di credito a un conto bancario :: C'è un modo per impostare un avviso di prezzo su Amazon?
Link utili