while(1)
sleep(3);
}
код конечно кривой и незаконченный , но я уже всяк перепробовал.
Проблема в следующем "bbbbbbb" выводиться сразу же причем по буквам
— т.е. пайп в принципе работает.Програама /intr.o просто в цикле гоняет
printf но в своей программе я их получаю не сразу а порциями по несколько штук.
Т.е. есть такое ощущение что набиваеться внутренний буфер а потом
выдаеться скопом.Причем через приличное время(там sleep в цикле стоит)
если его убрать то все это конечно быстрее но тоже пачками.
Причем это под QNX а под RedHat вообще ничего не получаю
хотя пайп между папой и сыном работает(bbbbbbb)
Люди хелп!!!!
Здравствуйте, 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(), читаеш с канала даные.
P>а ты не так пиши, можно прще: P>FILE * pipe = popen("app2","r"); P>потом с помощю функции gets(), читаеш с канала даные.
Это конечно замечательно , но мне нужен и stdin и stdout процесса
то биш двунапрвленный обмен.
К тому же вроде в таком варианте такая же фигня что я получаю данные
пачками а не по мере того как они вводятся. Может это конечно корявая реализация в QNX.
Но надеюсь может кто сталкивался с такой проблемой.
В принципе пишу удаленный шелл , может где есть какая нибудь инфа
или приемлемые исходники?
Вопрос снят!
Не знаю уж каким боком но это было завязано на процессе который я запускал......
непонятно правда почему...там кроме .printf sleep ничего больше нет
Здравствуйте, mukos, Вы писали:
M>Здравствуйте, patriotyk, Вы писали:
P>>а ты не так пиши, можно прще: P>>FILE * pipe = popen("app2","r"); P>>потом с помощю функции gets(), читаеш с канала даные.
M>Это конечно замечательно , но мне нужен и stdin и stdout процесса M>то биш двунапрвленный обмен. M>К тому же вроде в таком варианте такая же фигня что я получаю данные M>пачками а не по мере того как они вводятся. Может это конечно корявая реализация в QNX. M>Но надеюсь может кто сталкивался с такой проблемой. M>В принципе пишу удаленный шелл , может где есть какая нибудь инфа M>или приемлемые исходники?
M>р.s. счас popen под RadHatom проверю