Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

_popen

0 views
Skip to first unread message

Mariusz Marszałkowski

unread,
Dec 25, 2009, 3:04:20 AM12/25/09
to
Hey

Otwieram proces (pod win32) przy pomocy: p = _popen( plik , "rt" )
Następnie czytam przy pomocy fscanf, albo innej funkcji i nie ma
żadnych kłopotów, czyli odczytuję to co proces wysyła na stdout.

Ale gdy otwieram z opcjami "wt", to odczytuję jakieś śmieci których
proces nie wypisał na stdout. Otworzyć z opcjami "wr", albo "rw"
nie da się.

Czy muszę utworzyć pipe aby jednocześnie czytać i pisać do
procesu, czy coś robię źle z _popen?

Pozdrawiam

Bob

unread,
Dec 25, 2009, 4:54:20 AM12/25/09
to
On Dec 25, 9:04 am, Mariusz Marszałkowski <mmars...@gmail.com> wrote:
> Hey
>
> Otwieram proces (pod win32) przy pomocy: p = _popen( plik , "rt" )
> Następnie czytam przy pomocy fscanf, albo innej funkcji i nie ma
> żadnych kłopotów, czyli odczytuję to co proces wysyła na stdout.
>
> Ale gdy otwieram z opcjami "wt", to odczytuję jakieś śmieci których
> proces nie wypisał na stdout. Otworzyć z opcjami "wr", albo "rw"
> nie da się.

Jak otwierasz z wt, to znaczy otwierasz do zapisu, więc odczytywanie
nie ma sensu. Myslę, że musisz otworzyć dwie rury jedną do
odczytu, a drugą do zapisu.

Bob

unread,
Dec 25, 2009, 5:01:10 AM12/25/09
to

Może spróbuj CreatePipe i CreateProcess i przekaż
uchwyty w strukturze STARTUPINFO.

Mariusz Marszałkowski

unread,
Dec 25, 2009, 5:10:39 AM12/25/09
to

Zgadza się. Funkcja popen do tego się nie nadaje. Muszę chyba
otworzyć cztery rury, bo w procesie A uruchamiam dwa procesy B i C
aby B i C komunikowały się z sobą za pośrednictwem A. Trzeba
utworzyć nowy proces X w A, podmienić stdin i stdout na rury i
sawnować proces X z B, a później tak samo dla C. Od cholery
roboty... Wydaje się że zadanie jest typowe, zna może ktoś
gtowca?

Pozdrawiam

Wydaje się że zadanie


Mam proste zadanie, muszę otworzyć w jednym procesie dwa inne

Mariusz Marszałkowski

unread,
Dec 25, 2009, 7:13:46 AM12/25/09
to

Dzięki, zaraz sprawdzę. Na razie zrobiłem przy pomocy funkcji:
_pipe i _spawnl. Niby działa, ale wisi funkcji _read gdy nie ma
danych w rurce i nie wiem jak odwiesić. Po unixem była metoda
select do sprawdzania, a pod windą to nie wiem.

Pozdrawiam

0 new messages