con*_*ong 5 linux signals signal-handling
当我们编写一个可能会改变errno的信号处理程序时,我们是否应该在信号处理程序的开头保存errno并在它的末尾恢复errno?就像下面一样:
void signal_handler(int signo){
int temp_errno = errno;
*** //code here may change the errno
errno = temp_errno;
}
Run Code Online (Sandbox Code Playgroud)
glibc 文档说:
调用可能设置 errno 或修改浮点环境的函数的信号处理程序必须保存它们的原始值,并在返回之前恢复它们。
所以继续这样做。
如果您正在使用 pthreads 编写多线程程序,则有一种解决方法需要更少的努力。errno将在线程本地存储中。如果您将一个线程专用于处理面向进程的信号,而在所有其他线程中阻塞该信号,则您不必担心errno信号处理程序中的分配问题。
| 归档时间: |
|
| 查看次数: |
1126 次 |
| 最近记录: |