0

以下のように、libevの公式の例を試してみました。コンパイルして実行した後、標準入力から何かを入力すると、イベントがトリガーされ、問題はありません。しかし、私が入力したものはまだ固体入力として扱われ、コンソールに表示されます。私の質問は次のとおりです。このコンソール入力がコンソールにプロンプ​​ト表示されないようにする方法はありますか? libev がそれをキャッチして保存するのと同じように?

libevのどの方法でもこれを行うことができますか?

ここに公式の例を貼り付けます:

    // a single header file is required
    #include <ev.h>

    #include <stdio.h> // for puts

    // every watcher type has its own typedef'd struct
    // with the name ev_TYPE
    ev_io stdin_watcher;
    ev_timer timeout_watcher;

    // all watcher callbacks have a similar signature
    // this callback is called when data is readable on stdin
    static void
    stdin_cb (EV_P_ ev_io *w, int revents)
    {
      puts ("stdin ready");
      // for one-shot events, one must manually stop the watcher
      // with its corresponding stop function.
      ev_io_stop (EV_A_ w);

      // this causes all nested ev_run's to stop iterating
      ev_break (EV_A_ EVBREAK_ALL);
    }

    // another callback, this time for a time-out
    static void
    timeout_cb (EV_P_ ev_timer *w, int revents)
    {
      puts ("timeout");
      // this causes the innermost ev_run to stop iterating
      ev_break (EV_A_ EVBREAK_ONE);
    }

    int
    main (void)
    {
      // use the default event loop unless you have special needs
      struct ev_loop *loop = EV_DEFAULT;

      // initialise an io watcher, then start it
      // this one will watch for stdin to become readable
      ev_io_init (&stdin_watcher, stdin_cb, /*STDIN_FILENO*/ 0, EV_READ);
      ev_io_start (loop, &stdin_watcher);

      // initialise a timer watcher, then start it
      // simple non-repeating 5.5 second timeout
      ev_timer_init (&timeout_watcher, timeout_cb, 5.5, 0.);
      ev_timer_start (loop, &timeout_watcher);

      // now wait for events to arrive
      ev_run (loop, 0);

      // break was called, so exit
      return 0;
    }
4

2 に答える 2

1

ev_io_initあなたはあなたのトリガーが何であるかを設定しています。STDIN_FILENO を設定する代わりに、たとえばソケットから fd を使用することを選択できます。これがあなたが探しているものかどうかわかりません。ここに、私が言っていることの例があります。

于 2017-03-06T08:42:03.723 に答える