LINUX.ORG.RU

чтение fifo


0

0

что не так в этом коде? после посыла данных в fifo процесс начинает кушать все больше и больше процессорного времени

while(1)
{
fd_set fds;

FD_ZERO(&fds);
FD_SET(fd, &fds);

if(select(fd + 1, &fds, NULL, NULL, NULL) == -1)
{
if(errno == EINTR) continue;

fprintf(stderr, "select: %.100s (%i)\n", strerror(errno), errno);
close(fd);
exit(EXIT_FAILURE);
}

memset(buffer, '\0', sizeof(buffer));

if(FD_ISSET(fd, &fds))
{
if((f.n = read(fd, buffer, sizeof(buffer) - 1)) > 0)
{
fprintf(stdout, buffer);
}
}
}

anonymous

1. Используй strace и все поймешь.

2. Как открывается поток? [не без блокирования ли?]

3. Хорошо бы обрабатывать закрытие потока (придет 0 байт, насколько я понимаю)

4. Хорошо бы проверять ошибку после read.

5. Не забудь рассказать о результатах ;)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.