Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Přesměrování do roury jinému procesu po execlp

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: Přesměrování do roury jinému procesu po execlp

Autor: thark

16:53:06 09.12.2010

Mas prvni proces (P1), ktery vytvori rouru (pipe()) a vytvori proces P2 (fork()), P1 bude zapisovat data do zapisovaciho konce roury. V procesu P2 presmerujes cteci konec roury na stdin a spustis ten danej script v pythonu nejak takto:

FILE *f = popen(fce1, "r");

tim padem to co bude P1 zapisovat do roury se bude predavat tomu scriptu a jeho vystup prectes pomoci toho f ...

Citovat příspěvek

 

Re: Přesměrování do roury jinému procesu po execlp

Autor: lofcek

7:54:20 09.12.2010

Priznam sa, ze z rozpravania som nepochopil ucel toho co maju tieto 2 rury robit. Obvykle je, ze vytvorim 2 rury .. jedna bude detskemu programu sluzit ako stdin, druha ako stdout a v rodicovi posielam co potrebujem, potom precim vysledky, cez wait pockam na detsky proces a hotovo. A samozrejme vsetko toto mozem rovnako dobre porobit v Cecku, alebo Pythone - podla potreby.

Ale co by som Vam poradil .. skuste si na Vas program spustit strace zrejme s prepinacom -ffo a divat sa co robi rodic a co detske procesy

Citovat příspěvek

 

Přesměrování do roury jinému procesu po execlp

Autor: Martin_o5

15:55:20 08.12.2010

Dobrý den,
narazil jsem na jeden problém při používání a přesměrovávání rour a už si s ním druhý den nejsem schopný poradit. Nejprve vložím kod:

První proces má tento kod:
roury2 = malloc(2*sizeof(int));
pipe(roury2);
pid = fork();

if (pid == 0)
{
proces2(fce2);
return;
}
if (pid != -1)
{
close(roura1[1]);
dup2(roura1[0],STDIN_FILENO);
dup2(roura2[1],STDOUT_FILENO);
execlp(fce1,fce1,NULL);
}

Můj program vytváří nový proces(forkem),který vykonává kod výše, kterému posílá rourou data - funguje bez problémů.
Jak je vidět v ukázce kodu, ten následně (ještě před zpracováním dat z roury) stejným způsobem vytvoří další proces(funguje problémů), kterému posílá data jinou rourou.
Obtíž je v tom, že musím přesměrovávat standartní vstup a výstup, protože co první a druhý proces nad daty vykonají je dáno fcí(psaná v pythonu).
Fce v execl data zpracuje, ale nazapíše do roury, jak bych čekal - resp. žádná data se neobjeví na čtecím konci roury v procesu2. Pokud vynechám přesměrování STDOUT_FILENO, tak se vytisknou správně zpracovaná data na obrazovku.

Co dělám špatně? Je nějaký jiný způsob jak nechat fci pracovat nad daty(tiskne na standartní výstup výsledek) a ten poté posílat dál?
Díky za jakoukoli pomoc. Už začínám být bezradný.

Pokud zavolám i close(roura2[0]); tak mi python napíše IOError: [Errno 32] Broken pipe

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: