gpt4 book ai didi

c SIGINT 起作用了吗?

转载 作者:行者123 更新时间:2023-11-30 17:24:55 25 4
gpt4 key购买 nike

我正在尝试 SIGINT。我基本上希望我的程序在用户按下 control-c 时立即启动。当这种情况发生时,我将让程序制作一个管道。

现在,我决定当在信号处理程序中按下 control-c 时,它将调用一个函数来创建管道。但这是一团糟。运行 printf 命令没问题,但拒绝执行 if 语句,直到您再次按 control-c。有谁可以帮忙吗?

实际上,我想在按下一次 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");
}
}

最佳答案

您应该让调试器正常工作。它会在几秒钟内为您提供问题的答案,这对于尝试追踪此类问题至关重要。当您尝试解释输出时,看起来非常神秘和不清楚的事情在您单步执行时会显得非常简单,并且您可以看到一切。

这可能会导致 pipeline() 不执行您期望的操作,您将检查 errno,并且可能会得到有用的答案。

评论者关于避免在信号处理程序中执行操作的建议很好,因为它不可移植。但是,大多数现代操作系统都非常宽松,所以我不确定这是否是您在这种情况下的问题。

关于c SIGINT 起作用了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27161193/

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