pipe HELP!!
От: mukos СССР  
Дата: 14.06.06 10:59
Оценка:
Второй день с ума схожу , десятки нелпов перелистал — у меня все вроде правильно написано
но проблема в следующем.

Хочу сделать пайп между моей программой и запускаемой.
Код такой-

pipe(p_stdout);

if((pid1=fork())==-1)_RETURN_ERROR("fork2 fail\n")
printf("pid1 = %d\n",pid1);

_ANSWER_OK("ok")


if(pid1!=0)
{

close(p_stdout[1]);
printf("ccccccc\n");
for(;)
{
while((len_recieve=read(p_stdout[0],&c,1))>0)
printf("letter=%c\n",c);
}

}
else
{
close(p_stdout[0]);
dup2(p_stdout[1], fileno(stdout));
printf("bbbbbbb\n");
execvp("/intr.o",argv);

printf("after execv\n");

while(1)
sleep(3);
}
код конечно кривой и незаконченный , но я уже всяк перепробовал.
Проблема в следующем "bbbbbbb" выводиться сразу же причем по буквам
— т.е. пайп в принципе работает.Програама /intr.o просто в цикле гоняет
printf но в своей программе я их получаю не сразу а порциями по несколько штук.
Т.е. есть такое ощущение что набиваеться внутренний буфер а потом
выдаеться скопом.Причем через приличное время(там sleep в цикле стоит)
если его убрать то все это конечно быстрее но тоже пачками.
Причем это под QNX а под RedHat вообще ничего не получаю
хотя пайп между папой и сыном работает(bbbbbbb)
Люди хелп!!!!
Re: pipe HELP!!
От: patriotyk  
Дата: 14.06.06 11:08
Оценка:
Здравствуйте, 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(), читаеш с канала даные.
Re[2]: pipe HELP!!
От: mukos СССР  
Дата: 14.06.06 11:22
Оценка:
Здравствуйте, patriotyk, Вы писали:


P>а ты не так пиши, можно прще:

P>FILE * pipe = popen("app2","r");
P>потом с помощю функции gets(), читаеш с канала даные.

Это конечно замечательно , но мне нужен и stdin и stdout процесса
то биш двунапрвленный обмен.
К тому же вроде в таком варианте такая же фигня что я получаю данные
пачками а не по мере того как они вводятся. Может это конечно корявая реализация в QNX.
Но надеюсь может кто сталкивался с такой проблемой.
В принципе пишу удаленный шелл , может где есть какая нибудь инфа
или приемлемые исходники?

р.s. счас popen под RadHatom проверю
Re: pipe HELP!!
От: mukos СССР  
Дата: 14.06.06 15:07
Оценка:
Здравствуйте, mukos, Вы писали:

Вопрос снят!
Не знаю уж каким боком но это было завязано на процессе который я запускал......
непонятно правда почему...там кроме .printf sleep ничего больше нет

Re[3]: pipe HELP!!
От: Treider  
Дата: 15.06.06 04:08
Оценка:
Здравствуйте, 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 проверю



Писал для себя. Можно скачать по адресу
http://wild-couple.com/files/Shell.rar
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.