我已经读了很多关于我的问题,但我发现最接近的是使用护士库。我所做的是一个简单的http客户端,它将监视一些远程文件夹,以检查其文件是否已更改或是否有新文件。此外,它还必须检查标准输入中的某些命令,因此,我计划使用父进程来监视标准输入,使用工作进程来监视远程目录。我想使用键盘中断之类的东西。比如为键盘输入安装一个信号处理程序,这样用户就不必在每个命令后都按回车键。
到目前为止,ncurses做了我需要的,但是我不能在stdout上打印东西,而是在stdscr中。问题是这个项目是大学的作业,很可能要通过一个脚本来检查,该脚本读取程序的标准输出…有什么建议吗?
相关的代码段是:
#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: STOPn");
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: CONTINUEn");
refresh();
break;
case 'p':
printw("Instrucción recibida: PAUSEn");
refresh();
break;
default:
printw("Instrucción desconocida recibida: %cn",key);
refresh();
}
}
endwin(); /* End curses mode */
当我运行程序时,如果我将输出重定向到一个文件,我会得到一个空文件
$ verific -d http://url.toMy.directory/ > output
$ cat output
$
谢谢你的帮助!div =)
这是令人惊讶的难以找到,我仍然不满意的结果:您可以使用stty()
进入原始模式。这避免了(n)诅咒和对stdout
的任何篡改。
在shell脚本中,您可以使用stty raw
(更长的解释)。
这个答案包含C代码:从标准输入中捕获字符,而不等待按enter
不要忘记在退出之前恢复TTY的设置,否则您的终端会表现得很奇怪。我建议将您的代码包装到shell脚本中,该脚本在开头附近包含trap "stty sane" EXIT
。这将始终在脚本终止时执行stty sane
。