Почему опрос продолжает возвращаться, хотя нет данных?

Я написал небольшую тестовую программу, чтобы понять, как сpoll, Я создал три файла ,,testatestbtestc и написал строкуhello\n к первому. Итак, вот мой призыв:poll

poll(polls.data(),polls.size(),-1)

Согласно manpage, время ожидания-1 должно указывать, что системный вызов никогда не прерывается. Тем не менее, он продолжает возвращаться, не имея ничего читать. Я всегда потребляю один байт ввода и вижуhello\n печатается, но опрос нене останавливаться на достигнутом. Он просто продолжает притворяться, что есть что почитать.

#include 
#include 
#include 
#include 
#include 
#include 

#include 
#include 
#include 
#include 

typedef int fd_t;

int main() {
  fd_t const a = open("testa",O_RDONLY);
  fd_t const b = open("testb",O_WRONLY);
  fd_t const c = open("testc",O_RDWR);
  std::map names{{{a,"testa"},{b,"testb"},{c,"testc"}}};

  std::vector polls;
  polls.push_back(pollfd{a, POLLIN, 0});
  polls.push_back(pollfd{b, 0, 0});
  polls.push_back(pollfd{c, POLLIN, 0});

  while (poll(polls.data(),polls.size(),-1)) {
    for (auto p : polls) {
      if ((p.revents & (POLLIN|POLLERR)) == POLLIN) {
        std::cout < "{" < p.fd < ", " < p.events < ", " < p.revents < "} ";
        char byte;
        auto const rr = read(p.fd,&byte,1);
        auto const en = errno;
        if (rr) {
          std::cout < "File " < names[p.fd] < " says something: '" < ((int)byte) < " (" < (((' '

Ответы на вопрос(3)

Ваш ответ на вопрос