Как сказал Ланс Ричардсон, первая проблема заключается в том, что вам нужно передать число максимального дескриптора файла плюс один, а не количество дескрипторов файла.
Затем вы должны очистить домашнюю работу в потоке слушателя - я получил большую часть данных, но в итоге прослушал 6 файловых дескрипторов, а не 4. ( Сообщенный номер был теперь самый большой fd, а не количество файловых дескрипторов. )
У вас также проблема в том, что вы записываете строку плюс нулевой байт в каждый канал, затем вторую строку плюс нулевой байт. Поскольку планирование является недетерминированным, основная программа фактически записывает обе свои строки в каждое fifo, поэтому, когда поток слушателя получает возможность прочитать его, он читает обе строки. Когда я распечатал длины, я получил общую длину 41 чтения (read_len
), но длина строки на strlen()
была 31. Другими словами, первое чтение включало часть «kill», но вы не не заметить в распечатке из-за завершающего нуля в конце первого сообщения. Следовательно, вы ждали того, что никогда не случится.