很多系统调用,比如close( fd )
可以被信号打断。在这种情况下,通常-1
返回并errno
设置EINTR
。
问题是什么是正确的做法?说,我仍然希望fd
关闭它。
我能想到的是:
while( close( fd ) == -1 )
if( errno != EINTR ) {
ReportError();
break;
}
有人可以提出更好/更优雅/标准的方法来处理这种情况吗?
更新:正如 mux 所注意到的,RESTART
安装信号处理程序时可以使用 SA_ 标志。有人可以告诉我哪些功能可以保证在所有POSIX
系统上都可以重新启动(不仅Linux
)?