Named Pipes

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Named Pipes

    Hallo zusammen,

    ich habe ein kleines Problem mit NamedPipes auf einem Win200
    Server mit PHP 4.3 und Apache 2.0
    Ein C-Programm erstellt eine Pipe und wartet solange bis
    sich ein neue Prozess verbindet. Danach wartet es solange
    bis der neue Prozess was schreibt. Dieses wird dann einfach
    ausgegeben. Soweit dazu.
    Mit einem simplen Client(ebenfals ein C-Programm) funktioniert das
    ganze wunderbar.
    Nun möchte ich per PHP auf diese Pipe zugreifen und was
    "reinschreiben". Hier mein Code dazu :
    PHP-Code:
      $resPipepopen("\\\\.\\pipe\\test_pipe","w");
      
    fputs($resPipe,"funktioniert");
      
    pclose($resPipe); 
    Das Problem was ich nun habe ist, dass direkt nach dem popen
    die Verbindung wieder geschlossen wird, so dass ich keine
    Möglichkeit habe, etwas in die Pipe zu schreiben.
    Mach ich irgendwas falsch? Hat jemand eine Idee wie man es
    besser/anders machen könnte?
    Ich bin für jeden Tip dankbar!!

    Gruss
    Andreas

  • #2
    von php.net

    Anmerkung: Wenn das auszuführende Kommando nicht gefunden werden konnte, wird eine gültige Ressource zurückgegeben. Das mag seltsam erscheinen, macht aber Sinn. Es ermöglicht Ihnen, auf von der Shell zurückgegebene Fehlermeldungen zuzugreifen:
    haste das überprüft?

    Kommentar


    • #3
      var_dump($resPipe) wie erwartet nach dem öffnen? vielleicht fwrite?

      Kommentar


      • #4
        Meiner Meinung nach funktioniert der popen wie erwartet.
        Das C-Programm reagiert ja auch darauf. Meine Variable
        enthält eine gültige Resouce :
        resource(2) of type (stream)

        Das C-Programm versucht direkt nach dem Connect/popen aus
        der pipe zu lesen und fällt dabei auf die Nase, da die verbindung
        schon wieder geschlossen wurde. Und das passiert, ohne
        dass ich irgendetwas in die Pipe geschrieben habe.Weder mit
        fwrite noch mit fputs.
        Ich hab das ganze jetzt auf 3 verschiedenen Servern
        ausprobiert. Überall das gleiche Ergebnis. ...

        Noch weitere Ideen?

        Kommentar


        • #5
          lass vor dem pclose() das php-script mittels sleep() ca. 60 sekunden warten. was passiert dann?

          Kommentar


          • #6
            Hatte ich ausch schon probiert. ich habe ein "sleep" nach dem popen
            eingefügt, und scheinbar trennt sich die Verbindung direkt nach dem
            connect. Für mich sieht es fast so aus, dass die pipe durch den
            popen überschrieben wird. Könnte das sein?

            Kommentar


            • #7
              So, jetzt hab ichs gefunden. Anstatt die funktion popen zu nutzen,
              nehme ich einfach fopen...damit funktionierts wie gewünscht.

              Kommentar


              • #8
                Hi,

                ist ja nun geklärt aber das wär alles viel schneller gegangen wenn
                du mal ins manual zu popen geschaut hättest. popen() öffnet keine
                datei sondern forkt einen prozess auf und stellt dann eine verbindung zum
                aufgerufenen prozess her, via pipe.

                Ansonsten immer schön dran denken den zugriff auf die fifo zu
                synchronisieren.

                greets
                (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

                Kommentar

                Lädt...
                X