[英]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.