Вот возникли непонятки с сабжем:
Создаю fifo, открываю его с параметром O_RDONLY | O_NONBLOCK, вызываю на него select, все ок.
После того, как другой процесс пишет 1 байт в этот fifo, select завершается и я вычитываю этот байт из fifo.
Однако при следующем вызове select, fifo снова становится готовым на чтение, хотя данные в него никто больше не писал.
Почему такое может быть?
Код:
for (;;)
{
FD_ZERO(&fds);
FD_SET(fifo, &fds);
fd_max = MAX(fifo, fd_max);
...
/* добавляем еще дескрипторы: 2 пайпа и 1 сокет */
...
if (select(fd_max + 1, &fds, 0, 0, 0) < 0)
{
if (errno != EINTR)
err(1, "select");
}
...
/* обрабатываем готовность других дескрипторов на чтение */
...
if (FD_ISSET(fifo, &fds))
{
while (read(fifo, &i, 1) == 1)
; /* empty non-blocking fifo */
some_func();
continue;
}
}
Ответ на:
комментарий
от tailgunner
Ответ на:
комментарий
от BreadFan

Ответ на:
комментарий
от tailgunner
Ответ на:
комментарий
от BreadFan

Ответ на:
комментарий
от tailgunner
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум чтение fifo (2006)
- Форум forkpty и read (2004)
- Форум select, FD_ISSET, socket, тупняк (2010)
- Форум Select глючит? (2003)
- Форум connect return -1 errno = 105 (ENOBUFS) (2005)
- Форум Консольный обмен сообщениями (2017)
- Форум синхронизация pipe-ов через select? (2007)
- Форум Трабла с сокетами (2006)
- Форум Проблема с сокетами (2011)
- Форум Процесс выводит сообщение два раза (2015)