GNU/Linux >> Tutoriales Linux >  >> Linux

Comprobando si errno !=EINTR:¿qué significa?

Muchas llamadas al sistema reportarán el EINTR código de error si se produjo una señal mientras la llamada al sistema estaba en curso. En realidad, no ocurrió ningún error, solo se informa de esa manera porque el sistema no puede reanudar la llamada del sistema automáticamente. Este patrón de codificación simplemente vuelve a intentar la llamada al sistema cuando esto sucede, para ignorar la interrupción.

Por ejemplo, esto podría suceder si el programa utiliza alarm() para ejecutar algún código de forma asíncrona cuando se agota un temporizador. Si el tiempo de espera se agota mientras el programa está llamando a write() , solo queremos volver a intentar la llamada del sistema (también conocida como lectura/escritura, etc.).


las respuestas aquí son realmente buenas y quiero agregar algunos detalles internos:

Las llamadas al sistema que son interrumpidas por señales pueden abortar y devolver EINTR o reiniciarse automáticamente si y solo si SA_RESTART se especifica en sigaction(2)

y el responsable de esta tarea es el restart_block que solía rastrear información y argumentos para reiniciar las llamadas al sistema


Desde la página man en write :

La llamada fue interrumpida por una señal antes de que se escribiera ningún dato


Linux
  1. ¿Qué significa esta advertencia?

  2. ¿Qué hace la llamada al sistema brk()?

  3. ¿Qué significa rc en archivos de puntos?

  4. ¿Qué significa #define X X?

  5. ¿Qué significa matar -3?

¿Qué significa chmod 777?

¿Qué significa "-" (doble guión)?

¿Qué significa ser "sh compatible"?

No hay variable X11 DISPLAY - ¿qué significa?

¿Qué significa - en este comando de Linux?

¿Qué pasa si [[ $? -ne 0 ]]; significa en .ksh