GNU/Linux >> Linux Esercitazione >  >> Linux

Quando verificare la presenza di EINTR e ripetere la chiamata di funzione?

La tua applicazione è guidata dagli eventi? (Il che significa che il suo ciclo principale include select()/epoll_wait() chiamata).

In un'applicazione basata su eventi puoi bloccare tutti i segnali e sbloccarli solo per la durata di pselect()/epoll_pwait() chiamata. In questo modo il resto del tuo codice non avrà mai a che fare con EINTR.


Vedere sigaction:http://pubs.opengroup.org/onlinepubs/009695399/functions/sigaction.html

SA_RESTART
  This flag affects the behavior of interruptible functions; that is, those 
  specified to fail with errno set to EINTR. If set, and a function specified 
  as interruptible is interrupted by this signal, the function shall restart 
  and shall not fail with EINTR unless otherwise specified. If the flag is not 
  set, interruptible functions interrupted by this signal shall fail with errno 
  set to EINTR.

Per impostazione predefinita, hai il comportamento SA_RESTART, quindi non devi preoccuparti di EINTR, se non giochi con i segnali.


Linux
  1. Come controllare la versione del sistema operativo e di Linux

  2. In Bash, quando alias, quando script e quando scrivere una funzione?

  3. È possibile che il completamento di Bash scorra le alternative?

  4. Sostituire il titolo della finestra per una finestra arbitraria in Kde e impostare un titolo della finestra personalizzato?

  5. Utilizzo dello script Apache2Buddy per prestazioni e stabilità

4 motivi per scegliere Linux per l'arte e il design

Come verificare la presenza di file di grandi dimensioni nella console

Le 5 migliori distribuzioni Linux per sviluppatori e programmatori

Perché ottengo un tipo in conflitto per l'errore getline durante la compilazione dell'esempio di riga più lungo nel capitolo 1 di K&R2?

Chiamata di sistema fork() e funzione execv

Qual è il motivo per cui rmdir(1) e rm(1) coesistono?