У меня есть канал, который используют все мои дочерние процессы, но перед тем, как ребенок использует канал для связи с родителем, мне нужно очистить его, чтобы родительский объект правильно прочитал его. Есть ли в C простая функция для этого?
Способ «очистки» канала - чтение из него, пока буфер не опустеет. Это тебе не поможет. Я предполагаю, что ваша настоящая проблема заключается в том, что родитель может читать данные, которые смешаны из нескольких клиентов. Есть два простых решения вашей проблемы.
Всегда пишите сообщения длиной менее PIPE_BUF байт и делайте это за один вызов write. Это обеспечит атомарную запись в канал.
PIPE_BUF
write
Используйте отдельный канал для каждого дочернего процесса. На стороне сервера либо используйте потоки, либо используйте неблокирующий ввод-вывод с select или poll. Эквивалентно, вы можете использовать доменный сокет Unix и подключить к нему каждый клиент (на самом деле это просто другой способ создания отдельных каналов).
select
poll