Readline: получите новую подсказку на SIGINT

мы получили код, подобный следующему, используя readline: I '

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

void handle_signals(int signo) {
  if (signo == SIGINT) {
    printf("You pressed Ctrl+C\n");
  }
}

int main (int argc, char **argv)
{
   //printf("path is: %s\n", path_string);
  char * input;
  char * shell_prompt = "i-shell> ";
  if (signal(SIGINT, handle_signals) == SIG_ERR) {
    printf("failed to register interrupts with kernel\n");
  }

  //set up custom completer and associated data strucutres
  setup_readline();

  while (1) 
  {
    input = readline(shell_prompt);
    if (!input)
      break;
    add_history(input);

    //do something with the code
    execute_command(input);

  }  
  return 0;
}

он настроен на перехватSIGINT (то есть нажатие пользователемCtrl+C), так что я могу сказать, что обработчик сигналаhandle_signals() работает. Тем не менее, когда контроль возвращается кreadline(), Это'с использованием той же строки текста, которая использовалась до ввода. Что я'Я бы хотел, чтобы это произошло для "readline"отменить" текущая строка текста и дайте мне новую строку, очень похоже на оболочку BASH. Примерно так:

i-shell> bad_command^C
i-shell> _

Есть ли шанс заставить это работать? Что-то в списке рассылки, который я прочитал, упомянул, используяlongjmp(2), но это действительно некажется хорошей идеей

Ответы на вопрос(4)

Ваш ответ на вопрос