我已经阅读了很多关于我要求的内容,但我发现最接近的是使用ncurses库。我正在做的是一个简单的http客户端,它将监视一些远程文件夹以检查其文件是否已更改或是否有新文件。此外,它必须检查stdin的某些命令,所以,我打算使用父进程来监视stdin和worker进程来监视远程目录。我想用键盘中断之类的东西。类似于在键盘按下时安装信号处理程序,因此用户无需在每个命令后按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
$
感谢您的帮助! =)
答案 0 :(得分:1)
这很难找到,我仍然不满意结果:您可以使用stty()
进入原始模式。这避免了(n)诅咒和任何篡改stdout
。
从shell脚本中,您可以使用stty raw
(longer explanation)。
此答案包含C代码:Capture characters from standard input without waiting for enter to be pressed
在退出之前不要忘记恢复TTY的设置,否则终端会出现奇怪的现象。我建议将代码包装到一个shell脚本中,该脚本在开头附近包含trap "stty sane" EXIT
。当脚本终止时,这将始终执行stty sane
。