【发布时间】:2021-02-27 20:24:06
【问题描述】:
我知道在使用“getline”获取输入时如何忽略 Ctrl+C 之类的信号,但是当发送 SIGINT 信号时,我很难将继续消息发送到 while 循环让我告诉你我的意思。
这就是我想要得到的效果。就像您在 bash 终端中单击 Ctrl+c 时得到的一样。
每当您发送 SIGINT 信号时,都会打印一个换行符并继续循环。这是我目前拥有的代码。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
void handlec(int sig)
{
signal(sig, handlec);
printf("\n");
}
int main(void)
{
char *cmd = NULL;
size_t len;
signal(SIGINT, handlec);
while (1)
{
printf("insert ");
getline(&cmd, &len, stdin);
}
return (1);
}
在这个程序中,当按下ctr+c 时,会打印相同的^C 消息并打印新行,但循环不会自动继续,直到用户按下<RETURN>。你会如何处理这个问题?我尝试使用 goto 循环,但没有全局标签之类的东西,因此很难将 main 函数中的 while 循环从另一个函数中引导出来。如果重要的话,我会使用我自己的 getline 函数,所以如果有必要,我可以在那里进行任何操作。
【问题讨论】: