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

linux c++ libev official example show redundant console behavior

刚刚试了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;
    }

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

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