gpt4 book ai didi

c - 在信号处理程序中仍应避免使用全局变量但退出的函数?

转载 作者:太空宇宙 更新时间:2023-11-04 02:12:25 24 4
gpt4 key购买 nike

当我研究一些关于使用 C 的 unix 编程时,我了解到在信号处理程序中应该避免无法重入的函数,但是如果我有类似的东西:

int main(int argc, char** argv){
...
fileFd=open(...)
signal(SIGUSR1, signalHandler)
...
}


void signalHandler(int signo){
switch(signo){

case SIGUSR1:
myExit(EXIT_FAILURE);
break;

default:
break;

}
}

我的导出在哪里

void myExit(int ret){

...DO STUFF...
close(fileFd);
exit(ret);

}

fileFd 是一个全局变量,如果我没记错的话,myExit 是不可重入的……但在信号处理程序中使用它仍然是一个问题,即使它会导致程序退出?谢谢,如果这是一个愚蠢的问题,我们将不胜感激和抱歉。

最佳答案

您在信号处理程序中唯一可以安全地做的事情是设置一个可变的 sig_atomic_t 变量。请通过检查是否已收到信号(在信号处理程序之外)在程序的主循环中进行所有处理。如果您确实必须开始做不可移植的事情,那么至少考虑使用 _Exit() 或 _exit()。某些 C 库将保证某些函数是信号安全的,但这显然不能保证在不同的系统上工作。

关于c - 在信号处理程序中仍应避免使用全局变量但退出的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12357917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com