我正在尝试使用SIGINT。我基本上希望我的程序在用户点击control-c时立即启动。当发生这种情况时,我会让程序制作一个管道。
现在,我决定在信号处理程序中按下control-c时,它将调用一个函数来创建管道。然而这很糟糕。运行printf
命令很好,但在再次按control-c之前拒绝执行if
语句。有人能帮忙吗?
实际上,我想在按下一次后禁用control-C。
#include <stdio.h>
#include <signal.h>
void catchme(int signal);
void Setup();
int main()
{
if (signal(SIGINT, catchme) == SIG_ERR)
{
write(2, "Error catching signal C\n", 26);
}
printf("To begin, please press CTRL + C\n");
for(;;);
return 0;
}
void catchme(int signal)
{
write(1, "\n Caught Signal from Control C\n", 33);
Setup();
}
void Setup()
{
int firstPipe[2];
printf("Lets set up...\n");
if (pipe(firstPipe) < 0)
{
printf("Error creating pipe 1\n");
//abort program
}
else
{
printf("working so far");
}
}
答案 0 :(得分:0)
你应该让调试器工作。它会在几秒钟内为您提供问题的答案,并且对于尝试追踪这些问题至关重要。当你试图解释输出时,看起来非常神秘和不清楚的东西,当你踩过它时看起来很容易,你可以看到一切。
这可能导致pipe()没有按照你的预期行事,你会检查errno,并且可能会得到一个有用的答案。
评论者关于避免在信号处理程序中做事情的建议很好,因为它不便携。但是,大多数现代操作系统都非常宽松,所以我不确定在这种情况下这是不是你的问题。