_popen



  • hi Leute
    ich möchte mit der funktion _popen ein dos Programm starten und mit diesem über die stdout kommunizieren (MFC schreibt -> DOSProg liest/antwortet -> MFC liest... und das ständig wiederholen). Nun ist es aber so das ich nicht viel Ahnung von der Sache habe da ich mit _popen noch nie gearbeitet habe. Aus diesem Grund bitte ich euch mir eventuell mit einen kleinem Quelltextbeispiel zur hand zu gehen.
    vielen dank für eure mühen

    mfg
    Armin Gruber



  • Frittnschneider schrieb:

    MFC schreibt -> DOSProg liest/antwortet -> MFC liest...

    Also stdout und stdin in eine Pipe umleiten? Das geht mit POSIX-ähnlichen popen()-Implementierungen nicht, die Pipes sind unidirektional und somit für ein Ende der Pipe jeweils read-only oder write-only. Die _popen()-Doku im PSDK empfiehlt den Artikel Creating a Child Process with Redirected Input and Output, der zwei Pipes, einen für stdin und einen für stdout (aus Sicht des Kindprozesses) öffnet.
    Für echte POSIX-Systeme existiert auch PStreams, das Pipes auf stdin, stdout und stderr über std::basic_streambuf<>-Ableitungen zur Verfügung stellt (komfortabel das!). Es gibt im CVS-Repository auch einen Very-Very-Unofficial-Port für Windows, aber ob der was taugt, kann ich dir nicht sagen. Mehr crossplatform wirst du mit libexecstream, aber MUSEN (Meinem unbedeutenden STL-Empfinden nach ;-)) bettet sich PStreams schöner in die STL ein.



  • wow da gibts ne Menge Möglichkeiten... vielen dank für deine Hilfe. Ich glaube createprocess werd ich dann mal außen vor lassen - das ist für mein c++ Intelekt dan doch etwas zu hoch. Ich glaube ich versuch mal mein Glück mit pstreams... erst in das Thema einlesen und dan mal schaun ob ich den Durchblick erhalte.
    Vorerst mal besten dank (eventuell meld ich mich wieder falles nicht klapt 😉 )

    beste grüße
    Armin



  • Frittnschneider schrieb:

    Ich glaube ich versuch mal mein Glück mit pstreams...

    Wie gesagt, eine Windows-Version gibt's nur im CVS und die ist weder getestet noch vom Autor des Haupt-Branches als irgendwie brauchbar deklariert. Eine klassische OpenSource-User-Contribution in den Kinderschuhen eben, der Autor hat's zwar ins CVS reingelassen, aber 'ne Funktionsgarantie gibt er nicht.


Anmelden zum Antworten