当我们编写一个可能更改errno的信号处理程序时,我们应该在信号处理程序的开头保存errno,并在它的末尾恢复errno吗?如下所示:
void signal_handler(int signo){
int temp_errno = errno;
*** //code here may change the errno
errno = temp_errno;
}发布于 2018-01-22 20:06:37
glibc文档他说
调用可能设置errno或修改浮点环境的函数的信号处理程序必须保存它们的原始值,并在返回之前恢复它们。
那就去做吧。
如果您正在使用线程编写多线程程序,那么有一种解决方法需要更少的精力。errno将在线程本地存储中.如果您将一个线程专用于处理进程导向的信号,在所有其他线程中阻塞信号,则不必担心信号处理程序中分配给errno的任务。
https://stackoverflow.com/questions/48378213
复制相似问题