Такая ситуация: необходимо заставить главный процесс читать информацию из каналов (pipe()) открытых с дочерними процессами в неблокирующем режиме.
Возникают проблемы в таком случае: дочерний пишет информ. - все нормально, родитель читает; потом задержка на пару секунд - родитель говорит что информации нет (судя по errno - Resource temporary unavailable); потом подача информ. возобновляется - но родитель продолжает выдавать Resource temporary unavailable.
Делаю так: создаю pipe, дескриптор для чтения перевожу в неблокирующий режим:
fcntl(f_filedes[0], F_SETFL, O_NONBLOCK);
размножаю процесс ( fork() ), в каждом из процессов закрываю дескрипторы для чтения и записи (соотвецтвенно в дочернем и родительском). Потом дочерний пишет инфу, а родительский читает. В принципе для 2-х процессов неблок. режим и не нужен. Но если процессов больше, то главный должен обслуживать всех, а не ждать информации от первого, потом от второго, и т.д. , так как программа предполагается интерактивная. Короче: на главный процесс вешается функция сбора информации.
kernel 2.6.6, gcc 3.2.2