簡體   English   中英

如何在不按RET的情況下請求輸入-C,Linux OS中的鍵盤中斷

[英]How to ask for input without need of pressing RET - Keyboard Interrupt in C, Linux OS

我已經閱讀了很多有關即時通訊的內容,但是最近發現的是使用ncurses庫。 我正在做的是一個簡單的http客戶端,它將監視一些遠程文件夾,以檢查其文件是否已更改或是否有新文件。 另外,它還必須檢查stdin中的某些命令,因此,我計划使用父進程監視stdin,使用工作進程監視遠程目錄。 我想使用類似鍵盤中斷的功能。 諸如在鍵盤按下時安裝信號處理程序之類的東西,因此用戶不必在每個命令之后按下Enter鍵。

到目前為止,ncurses可以滿足我的需求,但是我無法在stdout上打印內容,而是在stdscr中打印。 問題在於該項目是大學的作業,很可能通過讀取mi程序標准輸出的腳本進行檢查...

那么,有什么建議嗎?

相關的代碼段是:

#include <ncurses.h>

  initscr();        /* Start curses mode              */
  raw();            /* Line buffering disabled        */
  noecho();         /* Don't echo() while we do getch */
  char key;
  while (TRUE) {
    key = getch();
    switch(key)
      {
      case 's':
        printw("Instrucción recibida: STOP\n");
        printf("Hasta Luego!\n");
        fflush(stdout);
        /*NOTICE THIS HAS NO EFFECT, */
        refresh();
        sleep(2);
        endwin();           /* End curses mode        */
        fflush(stdout);
        exit(0);
        break;
      case 'c':
        printw("Instrucción recibida: CONTINUE\n");
        refresh();
        break;
      case 'p':
        printw("Instrucción recibida: PAUSE\n");
        refresh();
        break;
      default:
        printw("Instrucción desconocida recibida: %c\n",key);
        refresh();
      }
  }
  endwin();           /* End curses mode        */

當我運行程序時,如果我將輸出重定向到文件,則會得到一個空文件

$ verific -d http://url.toMy.directory/ > output
$ cat output
$

謝謝你的幫助!!! =)

很難找到它,我對結果仍然不滿意:您可以使用stty()進入原始模式。 這樣可以避免(n)詛咒和對stdout任何篡改。

在shell腳本中,您將使用stty raw更長的說明 )。

此答案包含C代碼: 從標准輸入捕獲字符,而無需等待按下Enter鍵

退出前,請不要忘記恢復TTY的設置,否則您的終端會出現異常。 我建議將您的代碼包裝到一個shell腳本中,該腳本在開頭附近包含trap "stty sane" EXIT 腳本終止時,它將始終執行stty sane

暫無
暫無

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

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