【发布时间】:2018-11-06 04:23:29
【问题描述】:
我试图允许中断导致 readline 返回某个值。这是一个最小的例子:
#include <stdio.h>
#include <signal.h>
#include <readline/readline.h>
void handler (int status)
{
rl_replace_line("word",0);
rl_redisplay();
rl_done = 1;
}
int main (int argc, char** argv)
{
char* entry;
signal(SIGINT,handler);
entry = readline("");
printf("\nEntry was: %s\n", entry);
return 0;
}
如果我运行这段代码并按下 Control-C,在我按下 ENTER 后,果然会打印“Entry was: word”。但我希望它这样做而不需要用户按 ENTER。我基本上只想在收到中断信号时将条目设置为“word”,结束 readline 函数。我一直找不到任何关于如何结束 readline 循环并返回某个值的文档(我确定它就在那里,但我还没有找到)。
我尝试过的一件事是添加
(*rl_named_function("accept-line"))(1,0);
在处理程序的末尾,但它没有立即将文本发送到“条目”。
【问题讨论】:
-
我认为你可以通过使用
getch()实现你自己的readLine()来实现这一点。 -
没错,但我希望继续使用该库的所有其他功能(简单的历史记录、行编辑等)。
-
如果你得到 ^C,你想终止读取,这样你就可以返回而不用回车?
-
@Chris 为什么不实现我们自己的编译器和操作系统呢?
-
没错。我希望 readline() 返回一些预先指定的值。