De acordo com pipe(7)
:
Se todos os descritores de arquivo referentes à extremidade de leitura de um pipe tiverem sido fechados, então a
write(2)
fará com que umSIGPIPE
sinal seja gerado para o processo de chamada. Se o processo de chamada estiver ignorando esse sinal,write(2)
falhará com o erroEPIPE
.
Por que o Unix precisa ter o SIGPIPE
sinal quando write()
pode simplesmente retornar EPIPE
diretamente? Meu entendimento é que os sinais são destinados a coisas que são inerentemente assíncronas (por exemplo, encerramento de um filho, interrupção terminal). Mas SIGPIPE
só é gerado como o resultado imediato de uma chamada to write()
; nesse caso, ele sempre pode simplesmente retornar EPIPE
to to caller para indicar o erro ao chamador.
Por que foi considerado necessário ter SIGPIPE
além de EPIPE
?