0

私が求めていることについて多くのことを読みましたが、私が見つけた最も近いものは ncurses ライブラリを使用することです。私がしているのは、ファイルが変更されたかどうか、または新しいファイルがあるかどうかを確認するためにいくつかのリモートフォルダーを監視する単純な http クライアントです。また、いくつかのコマンドについて標準入力をチェックする必要があるため、親プロセスを使用して標準入力を監視し、ワーカー プロセスを使用してリモート ディレクトリを監視することを計画しています。キーボード割り込みのようなものを使用したいと思います。キーボードを押すためのシグナルハンドラーをインストールするようなもので、ユーザーは各コマンドの後にEnterキーを押す必要がありません。

これまでのところ、ncurses は必要なことを行っていますが、stdout ではなく stdscr で印刷できません。問題は、このプロジェクトが大学の課題であり、mi プログラムの stdout を読み取るスクリプトを通じてチェックされる可能性が非常に高いことです...

それで、何か提案はありますか?

関連するコードは次のとおりです。

#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()して raw モードに入ることができます。これにより、(n)curses と改ざんを回避できstdoutます。

シェル スクリプトからは、stty raw(長い説明) を使用します。

この回答にはCコードが含まれています:Enterキーが押されるのを待たずに標準入力から文字をキャプチャ

終了する前に TTY の設定を復元することを忘れないでください。そうしないと、端末の動作がおかしくなります。コードをシェルスクリプトにラップすることをお勧めします。これはtrap "stty sane" EXIT最初の近くに含まれています。stty saneこれは、スクリプトの終了時に常に実行されます。

于 2011-10-20T08:51:38.053 に答える