如何在不需要按RET键的情况下请求输入-键盘中断在C, Linux操作系统



我已经读了很多关于我的问题,但我发现最接近的是使用护士库。我所做的是一个简单的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

相关内容

  • 没有找到相关文章

最新更新