C 哪种功能即使在SA_重新启动时也会被信号中断?
当接收或处理信号时,POSIX中有哪些功能被中断的合理完整列表,即使没有信号处理程序或处理程序安装有C 哪种功能即使在SA_重新启动时也会被信号中断?,c,posix,signals,C,Posix,Signals,当接收或处理信号时,POSIX中有哪些功能被中断的合理完整列表,即使没有信号处理程序或处理程序安装有SA_RESTART?一些例子: 选择 nanosleep 等等 POSIX说: 如果信号捕捉功能执行返回语句,则中断功能的行为应与该功能的单独描述相同,不安全功能除外 因此,您可以单独查看所有函数,也可以为EINTR和POSIX筛选手册页。我做了后者,得到: 接受,, 暂停, 凯特克洛斯, 猫, chmod, 周, 打盹儿, 接近, closedir, 连接 杜普, 呃,不, 执行官, 散播,
SA_RESTART
?一些例子:
选择
nanosleep
- 等等
- POSIX说:
如果信号捕捉功能执行返回语句,则中断功能的行为应与该功能的单独描述相同,不安全功能除外
因此,您可以单独查看所有函数,也可以为EINTR和POSIX筛选手册页。我做了后者,得到:
接受,,
暂停,
凯特克洛斯,
猫,
chmod,
周,
打盹儿,
接近,
closedir,
连接
杜普,
呃,不,
执行官,
散播,
fchdir,
fchmod,
fchown,
fclose,
fcntl,
福福鲁斯,
等等,,
fgetwc,
福彭,
叉
fputc,
fputwc,
弗雷open,
周,
fsetpos,
fsync,
ftruncate,
格格伦特,
格格吉德,
格特格南,
getmsg,
getpwent,
getpwnam,
getpwuid,
ioctl,
伊克霍恩,
利奥·利斯蒂奥,
洛克,
mq_open,
mq_接收,
mq_send,
msgop,
msgrcv,
msgsnd,
奈米睡眠,
打开
暂停,
pclose,
投票
法洛卡特酒店,
posix_mem_偏移量,
posix_trace_create,
posix_跟踪_获取_过滤器,
posix_trace_getnext_事件,
posix_跟踪_打开,
posix_跟踪_开始,
posix_键入_mem_获取_信息,
posix_键入_mem_打开,
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_barrieratr_getpshared,
pthread_barrieratr_init,
pthread_cancel,
pthread_cleanup_push,
pthread_cond_init,
pthread_cond_信号,
pthread_cond_wait,
pthread_condattr_getclock,
pthread_condattr_getpshared,
pthread_condattr_init,
pthread_创建,
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_一次,
pthread_rwlock_init,
pthread_rBlock_rBlock,
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,
阅读
recv,
recvfrom,
recvmsg,
scanf,
选择,
选择_tut,
sem_open,,
sem_timedwait,
等等,
semop,
送,
sendmsg,
森托,
shm_open,
sigaction,
信号中断,
西格帕斯,
sigprocmask,
信号集,
SIG暂停,
西格维克,
sigwaitinfo,
statfs,
国家工作人员,
系统,,
tcdrain,
tcsetattr,
tmpfile,
截断
乌拉尔姆,
usleep,
等待
韦蒂德和
writetcSetttr也不可重启,至少在Linux 2.6.18中是这样的如果有人想知道的话,会有更多关于什么是重启的,什么不是重启的细节:但是如果出现信号,其中一些总是返回-1,并带有
EINTR
,而另一些则返回-1,其中包含EINTR
,仅当安装了没有SA_RESTART
的信号处理程序时才返回。我的问题是如何区分这两种情况。如果接收到带有SA_RESTART的信号且信号处理程序返回,则会重新启动除msgop、semop、semwait和select之外的所有上述函数。msgop、semop、semwait始终使用EINTR返回-1,并且select的行为已定义为实现(可能失败或可能重新启动)。您是否有参考?我找不到POSIX中是否/在何处指定了它。由于Linux是一种非常流行的实现,因此可能值得注意的是,它在这方面与POSIX并不完全匹配。