2010-05-12 2 views
2

У меня проблема в моей программе, которая использует трубы.Записать в тупиковую программу трубок

То, что я делаю, используя трубу вместе с вилкой/Exec для передачи данных другого процесса

Что у меня есть что-то вроде этого:

 
//pipes are created up here 

if(fork() == 0) //child process 
{ 
    ... 
    execlp(...); 
} 
else 
{ 
    ... 
    fprintf(stderr, "Writing to pipe now\n"); 
    write(pipe, buffer, BUFFER_SIZE); 
    fprintf(stderr, "Wrote to pipe!"); 
    ... 
} 

Это отлично работает для большинства сообщений, но когда сообщение очень велико, запись в тупиковые трубы.

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

Может ли кто-нибудь мне помочь?

ответ

3

Вам необходимо закрыть считываемый конец трубы в процессе записи. ОС будет хранить данные, записанные в трубу в буфере трубы, до все Процессы, у которых есть прочитанный конец открытого канала, действительно читают, что там есть.

+0

Это исправлено, спасибо, я не закрывал трубку, пока не закончил писать – avs3323

Смежные вопросы