GNU/Linux >> Linux Esercitazione >  >> Linux

Controllo se errno !=EINTR:cosa significa?

Molte chiamate di sistema riporteranno EINTR codice di errore se si è verificato un segnale mentre era in corso la chiamata di sistema. In realtà non si è verificato alcun errore, è solo segnalato in questo modo perché il sistema non è in grado di riprendere automaticamente la chiamata di sistema. Questo modello di codifica riprova semplicemente la chiamata di sistema quando ciò accade, per ignorare l'interrupt.

Ad esempio, questo potrebbe accadere se il programma fa uso di alarm() per eseguire del codice in modo asincrono quando un timer si esaurisce. Se il timeout si verifica mentre il programma sta chiamando write() , vogliamo solo riprovare la chiamata di sistema (ovvero lettura/scrittura, ecc.).


le risposte qui sono davvero buone e voglio aggiungere alcuni dettagli interni :

Le chiamate di sistema interrotte da segnali possono interrompere e restituire EINTR o riavviarsi automaticamente se e solo se SA_RESTART è specificato in sigaction(2)

e il responsabile di questo compito è il restart_block che era solito tenere traccia delle informazioni e degli argomenti per riavviare le chiamate di sistema


Dalla pagina man su write :

La chiamata è stata interrotta da un segnale prima della scrittura di qualsiasi dato


Linux
  1. Cosa significa questo avviso?

  2. Cosa fa la chiamata di sistema brk()?

  3. Cosa significa rc nei file punto

  4. Cosa significa #define X X?

  5. Cosa significa uccidere -3?

Cosa significa chmod 777

Cosa significa essere "sh compatibile"?

Cosa significa "rm is hash"?

Nessuna variabile DISPLAY X11 - cosa significa?

Cosa significa - in questo comando Linux?

Cosa succede se [[ $? -ne 0 ]]; significa in .ksh