Почему опрос продолжает возвращаться, хотя нет данных?
Я написал небольшую тестовую программу, чтобы понять, как сpoll
, Я создал три файла ,,testa
testb
testc
и написал строку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) < " (" < (((' '