linux c ++ libev官方示例显示冗余控制台行为

时间:2017-03-06 08:27:59

标签: c++ linux input console libev

我刚尝试了libev的官方示例,如下所示。编译和运行后,我看到一旦我从stdin输入任何东西,事件被触发,没问题。但我输入的内容仍被视为可靠输入,然后出现在我的控制台上。我的问题是:有没有办法避免这个控制台输入提示控制台,就像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;
    }

2 个答案:

答案 0 :(得分:1)

我认为你的意思是你所写的回声?这是终端程序的默认行为。您可以使用termios函数和标志来禁用回显。请记住在退出程序之前启用它。

答案 1 :(得分:1)

ev_io_init中,您正在设置触发器的内容。例如,您可以选择使用套接字中的fd,而不是设置STDIN_FILENO。不知道这是不是你想要的。在这里你有example我所说的。