gpt4 book ai didi

c - 面向 C/C++ 开发人员的 Eclipse 和 Ctrl+C

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:46:17 24 4
gpt4 key购买 nike

我使用 Eclipse for C/C++ Developers version 来编写必须通过发送信号 SIGINT 来响应 Ctrl+C 单击的代码。但是,当我从控制台运行我的代码时,我发现它根本不响应 Ctrl+C。我禁用了 Ctrl+C 作为复制键映射的功能,但它仍然没有解决问题。你知道我能做些什么来解决它吗?

代码示例:

#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>


static void sig_int(int num) {
printf("\nerror\n");
}

int main (int argc, char *argv[]) { //7

sigset_t zeromask;

if (signal(SIGINT, sig_int) == SIG_ERR)
fprintf(stderr,"signal(SIGINT) error");

printf("Hello\n");

if (sigsuspend(&zeromask) != -1)
fprintf(stderr,"sigsuspend error");

}

如果您从 Linux 终端运行此代码,当您单击“Ctrl+C”时,您将获得“错误”输出。但是,如果您从 Eclipse 控制台运行它,则什么也不会发生。 Eclipse 控制台不会将 Ctrl+C 视为键盘中断。

最佳答案

原因是 gdb 正在捕获 SIGINT 信号而不是将其传递。

如果您转到 gdb 控制台(带有 gdb 版本的控制台;而不是标有“traces”的控制台)并输入“信息信号”,您将看到如下列表:

info signals
Signal Stop Print Pass to program Description

SIGHUP Yes Yes Yes Hangup
SIGINT Yes Yes No Interrupt
SIGQUIT Yes Yes Yes Quit
SIGILL Yes Yes Yes Illegal instruction

请注意,SIGINT 的通行证设置为否。

输入:处理SIGINT通行证

SIGINT 也被 gdb 使用,因此它可能会询问您是否真的确定。

编辑:

当我从 Eclipse 尝试一个简单的程序时,程序在暂停之前不会收到 SIGINT。这可能是 Eclipse 的问题。当直接从 gdb 运行时,程序按预期工作。

关于c - 面向 C/C++ 开发人员的 Eclipse 和 Ctrl+C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36797967/

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