0

我已经阅读了很多关于我要问的内容,但我发现最接近的是使用 ncurses 库。我正在做的是一个简单的 http 客户端,它将监视一些远程文件夹以检查其文件是否已更改或是否有新文件。此外,它必须检查一些命令的标准输入,所以,我打算使用父进程来监控标准输入和工作进程来监控远程目录。我想使用键盘中断之类的东西。就像安装一个信号处理程序来按下键盘一样,所以用户不必在每个命令后按 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
$

谢谢你的帮助!!!=)

4

1 回答 1

1

这令人惊讶地难以找到,我仍然对结果不满意:您可以使用stty()进入原始模式。这避免了 (n) 诅咒和任何篡改stdout.

在 shell 脚本中,您将使用stty raw更长的解释)。

这个答案包含 C 代码:Capture characters from standard input without waiting for enter to be press

退出前不要忘记恢复 TTY 的设置,否则终端会出现异常。我建议将您的代码包装到一个包含trap "stty sane" EXIT开头附近的 shell 脚本中。这将始终stty sane在脚本终止时执行。

于 2011-10-20T08:51:38.053 回答