опрос устанавливает POLLIN, но чтение возвращает ноль, как это возможно?

#linux #ipc

#linux #ipc

Вопрос:

Я использую опрос в своей программе, чтобы проверить, есть ли что-то для чтения из канала. Когда нет, опрос не должен устанавливать POLLIN в revents. Но он сделал это, а затем, когда я попытался прочитать из своего канала, чтение вернуло ноль, что означает, что было прочитано ровно ноль байтов. Что происходит?

Вот вывод из strace:

 .
.
.
select(6, [4 5], NULL, NULL, NULL)      = 1 (in [5])
dup2(5, 0)                              = 0
poll([{fd=5, events=POLLIN}], 1, 0)     = 1 ([{fd=5, revents=POLLIN}])
read(5, "", 1)                          = 0
clock_nanosleep(CLOCK_REALTIME, 0, {tv_sec=3, tv_nsec=0}, ^C{tv_sec=1, tv_nsec=251473866}) = ? ERESTART_RESTARTBLOCK (Interrupted by signal)
strace: Process 45891 detached