чтение из трубы блокирует - PullRequest
1 голос
/ 15 ноября 2011

Я читаю неизвестное количество сообщений из канала. Тем не менее, чтение блокирует. Я попробовал приведенный ниже код, чтобы установить чтение неблокирующим. Однако это приводило к ошибкам чтения и процессам, которые не читались до конца.

// Set pipe to non-blocking
sleep(5);
fcntl(fd[index][0], F_SETFL, O_NONBLOCK);

Как мне успешно прочитать и распечатать все сообщения без зависания программы? Вот код, который вызывает проблему:

// Read every message
while((n = read(fd[index][0], &mymsg, sizeof(int))) == sizeof(int))
    printf("process%d  has received a message from process%d\n", index, mymsg);

1 Ответ

1 голос
/ 15 ноября 2011

Используйте select () или epoll ().Это стандартный способ добиться неблокирующего чтения (или записи) без многопоточности.

...