1

以下の小さなプログラムがあると、次のことが期待されます。

>> forget_me!^C
>> next
next
>>

しかし、実際には次のとおりです。

>> forget_me!^C
>> next
forget_me!next
>>

ここで説明されているように、デフォルトの SIGINT ハンドラはバッファをクリアすべきではありませんか?

どうすれば望ましい結果を得ることができますか?

#include <cstdlib>
#include <csignal>
#include <iostream>
#include <readline/readline.h>
#include <readline/history.h>

const std::string prompt{">> "};

void new_line_handler(int i) { std::cout << "\n" << prompt; }

int main() {
  struct sigaction action = {};
  action.sa_handler = new_line_handler;
  sigaction(SIGINT, &action, nullptr);

  char *input;
  while (true) {
    input = readline(prompt.c_str());
    if (!input)
      break;
    add_history(input);
    std::cout << input << "\n";
    free(input);
  }
  return 0;
}
4

0 に答える 0