Quelles fonctions sont interrompues par des signaux même avec SA_RESTART?

Existe-t-il une liste assez complète des fonctions de POSIX qui sont interrompues avec EINTR lorsqu’un signal est reçu ou traité, même en l’absence de gestionnaire de signal ou si le gestionnaire a été installé avec SA_RESTART ? Quelques exemples:

  • select
  • nanosleep
  • etc.

tcsetattr ne peut pas non plus être redémarré, du moins sous Linux 2.6.18

POSIX dit:

Si la fonction de capture de signal exécute une instruction return, le comportement de la fonction interrompue doit être tel que décrit individuellement pour cette fonction, à l’exception de ce qui est indiqué pour les fonctions dangereuses.

Vous pouvez donc parcourir toutes les fonctions individuellement ou filtrer vos pages de manuel pour EINTR et POSIX. J’ai fait le dernier et j’ai obtenu:

accepter, aio_suspend, catclose, catgets, chmod, chown, clock_nanosleep, fermer, closedir, se connecter, dup, errno, exec, fallocate, fchdir, fchmod, fchown, fclose, fcntl, fcush, ffl fputwc, freopen, fseek, fsetpos, fsync, ftruncate, getgrent, getgrgid, getgrnam, getmsg, getpwent, getpwnam, getpwuid, mq_rece pause, pclose, sondage, posix_fallocate, posix_mem_offset, posix_trace_create, posix_trace_get_filter, posix_trace_getnext_event, posix_trace_open, posix_trace_start, posix_typed_mem_get_info, posix_typed_mem_open, printf, pthread_atfork, pthread_attr_getdetachstate, pthread_attr_getguardsize, pthread_attr_getinheritsched, pthread_attr_getschedparam, pthread_attr_getschedpolicy, pthread_attr_getscope, pthread_attr_getstack, pthread_attr_getstackaddr, pthread_attr_getstacksize, pthread_attr_init, pthread_barrier_init, pthread_barrier_wait, pthread_barrierattr_getpsha rouge, pthread_barrierattr_init, pthread_cancel, pthread_cleanup_push, pthread_cond_init, pthread_cond_signal, pthread_cond_wait, pthread_condattr_getclock, pthread_condattr_getpshared, pthread_condattr_init, pthread_create, pthread_detach, pthread_equal, pthread_getconcurrency, pthread_getschedparam, pthread_getspecific, pthread_join, pthread_key_create, pthread_key_delete, pthread_kill, pthread_mutex_getprioceiling, pthread_mutex_init, pthread_mutex_lock, pthread_mutex_timedlock, pthread_mutexattr_getprioceiling, pthread_mutexattr_getprotocol, pthread_mutexattr_getpshared, pthread_mutexattr_gettype, pthread_mutexattr_init, pthread_once, pthread_rwlock_init, pthread_rwlock_rdlock, pthread_rwlock_timedrdlock, pthread_rwlock_timedwrlock, pthread_rwlock_unlock, pthread_rwlock_wrlock, pthread_rwlockattr_getpshared, pthread_rwlockattr_init, pthread_self, pthread_setschedprio, pthread_spin_init, pthread_spin_lock, pthread_spin_unlock, pthread_testcancel, putmsg, lire, recv, recvfrom, recvmsg, scanf, select, select_tut, sem_open, sem_timedwait, sem_wait, semop, send, sendmsg, sendto, shm_open, sigaction, sigpause, sigprocmask, sigset, sigsuspend, sigvec, sigwait, statf, statf, tronquer, ualarm, usleep, wait, waitid et écrire