Вот возникли непонятки с сабжем: Создаю 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)