popen-es pipe-ból mindent olvasni

 ( jimmycime | 2004. május 1., szombat - 0:30 )

popen-es pipe-ból mindent olvasni

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

[quote="egmont"][quote="jimmycime"]Vagyis úgy akarom olvasni a pipe-ot (abban a sorrendben), ahogy a user látná, ha simán futtatja a scriptet/progit egy terminálon![/quote]
Ha pontosan ebben a sorrendben akarod kiolvasni az adatokat, azt terminál emulátor írása nélkül sajnos nem úszod meg,[/quote]

uj pseudo tty-t kell nyitni es akkor azt fogja hinni hogy az olyan mint
az igazi

[quote:b5a25621d6="jimmycime"]Aztán meg arra gondoltam ,hogy mi lenne, ha egy FIFO-ba iránytanám át mindkettőt (progi stdout+stderr-jét). Igazából FIFO-t soha nem használtam, csak elsiklottam a libc leírásában fölötte, hogy van ilyen is. Esetleg vmi ilyen tapasztalatod van ezzel kapcsolatban???
Vagy nem lehet azt, hogy átirányítom az stderr-t simán vhogy az stdout-ba????[/quote:b5a25621d6]

ha at akarod iranyitani az stderrt, az nagyon egyszeru: close(2); dup2(1, 2); es kesz.

a pufferelesrol meg annyit (bar lehet hogy popen() altal visszaadott streamnel nem egeszen igy mukodik, ki kell probalni) hogy setbuf() illetve setlinebuf() segitsegevel te is meg tudod mondani, hogy pufferelje -e a streameket, illetve sor- vagy blokk-pufferelest hasznaljon.

[quote="vili"][quote="jimmycime"]
a pufferelesrol meg annyit (bar lehet hogy popen() altal visszaadott streamnel nem egeszen igy mukodik, ki kell probalni) hogy setbuf() illetve setlinebuf() segitsegevel te is meg tudod mondani, hogy pufferelje -e a streameket, illetve sor- vagy blokk-pufferelest hasznaljon.[/quote]

Nope. Az hogy a popenelo programod hogy pufferel nem befolyasolja hogy
a masik program mit csinal.

[quote:42962f2aae="borso"]Nope. Az hogy a popenelo programod hogy pufferel nem befolyasolja hogy
a masik program mit csinal.[/quote:42962f2aae]

ki allitotta az ellenkezojet? olvasd mar el meg egyszer, mit irtam.

Sziasztok!

Az lenne a kérdésem, hogy hogyan oldjam meg azt, hogy ha egy pipe-on futtatok egy processt (eme megfogalmazás nem túl korrekt, de aki ért hozzá úgyis tudja miről van szó :) ), akkor abból ne csak az stdout-ot, hanem az stderr-t is olvassam??? Vagyis úgy akarom olvasni a pipe-ot (abban a sorrendben), ahogy a user látná, ha simán futtatja a scriptet/progit egy terminálon!

Előre is köszi!

Jimmy

[code:1:b93ab04cbb]prog1 2>&1 |[/code:1:b93ab04cbb]
ez így nem jó?
de hogy ez hogy c/c++ téma... :wink:

[quote:d12603ffb6="jimmycime"]Vagyis úgy akarom olvasni a pipe-ot (abban a sorrendben), ahogy a user látná, ha simán futtatja a scriptet/progit egy terminálon![/quote:d12603ffb6]
Ha pontosan ebben a sorrendben akarod kiolvasni az adatokat, azt terminál emulátor írása nélkül sajnos nem úszod meg, ugyanis a legtöbb program (glibc alapértelmezett működése) ha terminál van alatta, akkor soronként puffereli a stdout-ot és a stderr-t is, míg ha fájlba (vagy pipe-ba) van irányítva, akkor kb. 4kB-onként puffereli. Tehát már más lesz a kettő egymáshoz képesti viszonya.

elsőként köszi az elszomorító választ!
Aztán meg arra gondoltam ,hogy mi lenne, ha egy FIFO-ba iránytanám át mindkettőt (progi stdout+stderr-jét). Igazából FIFO-t soha nem használtam, csak elsiklottam a libc leírásában fölötte, hogy van ilyen is. Esetleg vmi ilyen tapasztalatod van ezzel kapcsolatban???
Vagy nem lehet azt, hogy átirányítom az stderr-t simán vhogy az stdout-ba????

Előre is thx!

Jimmy

[quote:259523b4cf="jimmycime"]Vagy nem lehet azt, hogy átirányítom az stderr-t simán vhogy az stdout-ba????
[/quote:259523b4cf]
olvasd már el, amit írtam :x

[quote:b15bf91976="jimmycime"]Vagy nem lehet azt, hogy átirányítom az stderr-t simán vhogy az stdout-ba????[/quote:b15bf91976]
Lehet, de ez vszleg semmit nem változtat azon, hogy a sorrend könnyen lehet hogy más lesz, mint ahogyan a terminálon jelennek meg az üzenetek. Próbáld ki...

http://www.experts-exchange.com/Programming/Programming_Languages/C/Q_20926010.html