existe une liste raisonnablement complète dont les fonctions de POSIX sont interrompues avec Eintr code> lorsqu'un signal est reçu ou manipulé, même s'il n'y a pas de gestionnaire de signal ou si le gestionnaire a été installé avec
SA_RESTART CODE>? Quelques exemples: p>
Sélectionnez CODE> LI>
nanosleep code> li>
3 Réponses :
POSIX dit: P>
Si la fonction capture du signal exécute une instruction de retour, le comportement de la fonction interrompue doit être tel que décrit individuellement pour cette fonction, sauf indication contraire des fonctions dangereuses. P> blockQuote>
Donc, soit vous regardez à travers toutes les fonctions individuellement ou filtrez vos pages d'homme pour EINTR et POSIX. J'ai fait ce dernier et j'ai eu: p>
Accepter, AIO_SUSPEND, CATCLOSE, cubes, chmod, chown, clock_nanosleep, proche, fermé, relier, DUP, errno, EXEC, tombocat, fchdir, fchmod, fkown, fclose, fcntl, fflush, fgetc, fgetwc, fopen, fourchette, fputc, fippewc, Freopen, fsek, fsetpos, fsync, Ftrunate, Getgrent, GetGrgid, Getgram, getmsg, getpwent, GetPwnam, getPwuid, ioctl, lchown, lio_listio, Lockf, mq_open, mq_receive, mq_send, msgop, MSGRCV, msgsnd, nanosleep, ouvert, pause, pclose, sondage, POSIX_FALLACTE, 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_getDétachstate, pthread_attr_getguardise, pthread_attr_getikheritsched, 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_getPshared, 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_timedwrock, pthread_rwlock_unlock, pthread_rwlock_wrock, pthread_rwlockattr_getPshared, pthread_rwlockattr_init, pthread_self, pthread_setschedPrio, pthread_spin_init, pthread_spin_lock, pthread_spin_unlock, pthread_tescancel, putsg, lire, recv, Recvrom, RECVMSG, scanf, sélectionner, SELECT_TUT, SEM_OPEN, SEM_TIMEDWAIT, SEM_WAIT, smop, envoyer, sendmsg, envoyer à, shm_open, Sigaction, siginterrupt, Sigpause, SigProcmask, SIGSET, sigsuspend, sigvec, sigwaitinfo, STATFS, statvfs, système, tcdrain, tcsetattr, tmpfile, tronquer, ualarm, tu dors, attendre, waitid et écriture p>
Mais certains d'entre eux retournent toujours -1 avec Eintr code> si un signal se produit, et d'autres renvoient -1 avec
Eintr code> uniquement lorsqu'il y a un gestionnaire de signal installé sans
SA_RESTART code>. Ma question consiste à distinguer ces deux cas.
Toutes les fonctions ci-dessus, à l'exception de MSGOP, SEMOP, SEM WAIT, et sélectionnez, sont redémarrées si un signal avec SA_RESTART est reçu et que le gestionnaire de signal revient. MSGOP, SEMOP, SEM I> Attendez toujours de retour -1 avec Eintr et le comportement de Select est défini par la mise en œuvre (peut échouer ou être redémarré).
Avez-vous une référence? Je ne trouve pas si / où il est spécifié dans POSIX.
Puisque Linux est une implémentation très populaire, il convient probablement de noter qu'il ne correspond pas strictement à Posix dans cette zone. Stackoverflow.com/questions/4959524/...
tcsetattr n'est pas non plus redartable, au moins sous Linux 2.6.18 P>
Si quelqu'un se demande, le Manpage pour Signal (7 ) code>
a plus de détails sur ce qui est et ce qui n'est pas redémarré: p>