簡體   English   中英

GNU Readline:是否有取消readline輸入請求的功能?

[英]GNU Readline: Is there a function that cancels readline input request?

我是GNU Readline的新手,所以我想知道是否存在可以取消readline()請求的函數?

為此,您必須使用備用 (或“回調”)界面來讀取行。 實際上,您無需取消任何操作,只需(暫時)退出rl_callback_read_char循環即可執行所需的任何操作。 這甚至可以在用戶發送ENTER 之前發生,但只能在按鍵之后發生

#include <stdio.h>
#include <stdlib.h>
#include <readline/readline.h>

void line_handler(char *line) { /* This function (callback) gets called by readline                    
                                   whenever rl_callback_read_char sees an ENTER */
  printf("%s? Hah!!\n", line);
}

int main() {
  rl_callback_handler_install("Ask a question: ", &line_handler);

  while (1) {
    rl_callback_read_char();
    if (strstr(rl_line_buffer, "you")) { /* They're asking about *me* =:-0 */
      printf("\nNo personal questions please! Goodbye!\n");
      break;
      /* or make a snarky remark and continue */
    }
  }
}

如果要在沒有按鍵的情況下“取消”,則必須使用信號(例如,通過設置alarm() )來中斷rl_callback_read_char()內部的read()系統調用。 但是請注意,readline 會安裝自己的信號處理程序

稍微復雜一點的方法是在循環中的兩個文件描述符stdin和例如管道( self-pipe技巧 )上插入一個select() ),以使用第二個描述符(和/或超時)“喚醒” “ select() ,然后像下面的示例一樣退出循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM