【发布时间】:2014-04-02 23:10:19
【问题描述】:
我正在尝试处理 SIGINT。 SIGINT 在我的程序中的主要目的是取消当前搜索功能并打印当前可用的结果。但是每当我试图捕捉一个 SIGINT 信号时,它只会关闭我的程序。 (搜了这么多,请不要说我搜的还不够)
我试过了:
基本信号处理(如下图)
sigaction 功能
非本地信号处理
sigprocmask(当我阻塞信号时,procmask 出现问题,我无法捕捉到它,但我需要捕捉并在屏幕上打印)
毕竟我已经用完了搜索关键字来找到解决方案。任何的想法 ? (搜索关键字或部分代码或逻辑方式来做到这一点^^)
注意:此文本可能有语法错误。如有错误请见谅。
#ifdef DEBUG
#define DPRINT(file ,message ,arg) fprintf(file ,message ,arg);
#define NDPRINT(file ,message) fprintf(file ,message);
#endif
static volatile sig_atomic_t isSignalCaught = 0;
void SIGHandler(int signo);
int main(int argc, char** argv)
{
file_t *files,*nextP;
signal(SIGINT, SIGHandler);
files = findFiles("/");
while (files != NULL) {
DPRINT(stderr, "%s\n", files->fileName.string);
nextP = files->pNext;
free(files->fileName.string);
free(files);
files = nextP;
}
return(0);
}
void SIGHandler(int signo)
{
file_t *nextP;
if (signo == SIGINT) {
isSignalCaught = 1;
}
}
【问题讨论】: