GNU/Linux >> Znalost Linux >  >> Linux

Kontrola, zda errno !=EINTR:co to znamená?

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 EINTR nebo se automaticky restartují pouze tehdy, když SA_RESTART je specifikováno v sigaction(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


Linux
  1. Co toto varování znamená?

  2. Co dělá systémové volání brk()?

  3. Co znamená rc v souborech s tečkami

  1. Co se stane, když [[ $? -ne 0]]; znamená v .ksh

  2. Co znamená \b ve vzoru grep?

  3. Co znamená %st nahoře?

  1. Co znamená `chown Root.root $file`?

  2. Co znamená „rm is hash“?

  3. Co znamená - v tomto linuxovém příkazu?