Mnoho systémových volání bude hlásit EINTR chybový kód, pokud během systémového volání došlo k signálu. Ve skutečnosti nedošlo k žádné chybě, je to jen hlášeno tímto způsobem, protože systém není schopen automaticky obnovit systémové volání. Tento vzor kódování jednoduše zopakuje systémové volání, když k tomu dojde, aby se přerušení ignorovalo.
Například k tomu může dojít, pokud program používá alarm() spustit nějaký kód asynchronně, když vyprší časovač. Pokud časový limit nastane, když program volá write() , chceme jen zopakovat systémové volání (neboli čtení/zápis atd.).
odpovědi zde jsou opravdu dobré a chci přidat nějaké interní podrobnosti:
Systémová volání, která jsou přerušována signály, se mohou buď zrušit, nebo vrátit
EINTRnebo se automaticky restartují pouze tehdy, kdyžSA_RESTARTje specifikováno vsigaction(2)
a ten, kdo za tento úkol odpovídá, je restart_block který slouží ke sledování informací a argumentů pro restartování systémových volání
Z manuálové stránky na write :
Hovor byl přerušen signálem před zápisem jakýchkoli dat