GNU/Linux >> Tutoriels Linux >  >> Linux

Vérifier si errno !=EINTR :qu'est-ce que cela signifie ?

De nombreux appels système rapporteront le EINTR code d'erreur si un signal s'est produit alors que l'appel système était en cours. Aucune erreur ne s'est réellement produite, elle est simplement signalée de cette façon car le système n'est pas en mesure de reprendre l'appel système automatiquement. Ce modèle de codage réessaye simplement l'appel système lorsque cela se produit, pour ignorer l'interruption.

Par exemple, cela peut arriver si le programme utilise alarm() pour exécuter du code de manière asynchrone lorsqu'un minuteur s'est écoulé. Si le délai d'attente se produit pendant que le programme appelle write() , nous voulons juste réessayer l'appel système (c'est-à-dire lire/écrire, etc.).


les réponses ici sont vraiment bonnes et je veux ajouter quelques détails internes :

Les appels système qui sont interrompus par des signaux peuvent soit abandonner et renvoyer EINTR ou redémarrer automatiquement si et seulement si SA_RESTART est spécifié dans sigaction(2)

et le responsable de cette tâche est le restart_block qui servait à suivre les informations et les arguments pour redémarrer les appels système


À partir de la page de manuel sur write :

L'appel a été interrompu par un signal avant qu'aucune donnée ne soit écrite


Linux
  1. Que signifie rc dans les fichiers dot

  2. Que fait si [[ $ ? -ne 0 ]] ; signifie en .ksh

  3. Qu'est-ce que cela signifie par #define X X ?

  4. Que signifie tuer -3 ?

  5. Que signifie \b dans un modèle grep ?

Que signifie chmod 777

Que signifie "-" (double tiret) ?

Qu'est-ce que cela signifie d'être "compatible sh" ?

Pas de variable DISPLAY X11 - qu'est-ce que cela signifie ?

Que fait init exactement ?

Que signifie %st en haut ?