【问题标题】:How do I make readline() exit on Ctrl+C?如何让 readline() 在 Ctrl+C 上退出?
【发布时间】:2021-04-01 03:36:01
【问题描述】:

readline遇到Ctrl+C需要退出。

if (chkCmd(1, farg[0], "INPUT$")) {
    cerr = 0;
    ftype = 1;
    if (fargct > 1) {cerr = 3; goto fexit;}
    if (fargct == 1 && fargt[1] != 1) {cerr = 2; goto fexit;}
    outbuf[0] = 0;
    char* tmp = NULL;
    if (fargct == 1) {
        tmp = readline(farg[1]);
    } else {
        tmp = readline("?: ");
    }
    if (tmp != NULL) {
        copyStr(tmp, outbuf);
        free(tmp);
    }
    if (debug) printf("input output: {%s}\n", outbuf);
    goto fexit;
}

如果不修改 readline 的源代码(我想不惜一切代价避免),我不知道如何做到这一点。我尝试过rl_set_signals();rl_clear_signals();,但这些都不起作用。

我在 Google 上进行了无数次搜索,却得到了不相关的结果,所以我认为这个问题是第一次。

【问题讨论】:

    标签: c readline


    【解决方案1】:
    rl_getc_function = getc;
    

    更改 readline 的 getc 函数会起作用,因为 getc 在 Ctrl+C 上返回 -1,这会导致 readline 返回 NULL。

    【讨论】:

      猜你喜欢
      • 2020-04-28
      • 2011-10-01
      • 1970-01-01
      • 2019-10-29
      • 2017-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-11
      相关资源
      最近更新 更多