Здравствуйте, mukos, Вы писали:
M>Второй день с ума схожу , десятки нелпов перелистал — у меня все вроде правильно написано M>но проблема в следующем.
M> Хочу сделать пайп между моей программой и запускаемой. M>Код такой-
M> pipe(p_stdout);
M> if((pid1=fork())==-1)_RETURN_ERROR("fork2 fail\n") M> printf("pid1 = %d\n",pid1);
M> _ANSWER_OK("ok")
M> if(pid1!=0) M> {
M> close(p_stdout[1]); M> printf("ccccccc\n"); M> for(;) M> { M> while((len_recieve=read(p_stdout[0],&c,1))>0) M> printf("letter=%c\n",c); M> }
M> } M> else M> { M> close(p_stdout[0]); M> dup2(p_stdout[1], fileno(stdout)); M> printf("bbbbbbb\n"); M> execvp("/intr.o",argv);
M> printf("after execv\n");
M> while(1) M> sleep(3); M> } M>код конечно кривой и незаконченный , но я уже всяк перепробовал. M>Проблема в следующем "bbbbbbb" выводиться сразу же причем по буквам M>- т.е. пайп в принципе работает.Програама /intr.o просто в цикле гоняет M>printf но в своей программе я их получаю не сразу а порциями по несколько штук. M>Т.е. есть такое ощущение что набиваеться внутренний буфер а потом M>выдаеться скопом.Причем через приличное время(там sleep в цикле стоит) M>если его убрать то все это конечно быстрее но тоже пачками. M>Причем это под QNX а под RedHat вообще ничего не получаю M>хотя пайп между папой и сыном работает(bbbbbbb) M>Люди хелп!!!!
а ты не так пиши, можно прще:
FILE * pipe = popen("app2","r");
потом с помощю функции gets(), читаеш с канала даные.