Problem: Realtime piping



  • Hallo zusammen,

    ich habe folgendes Problem. Ich starte einen beliebigen prozess.( Ich habe hier einen bestimmten der output liefert, aber auch teilweise den output stoppt um im hintergrund etwas zu verarbeiten) Mein Problem ist nun der prozess liefert einen Output bswp. "Aktuelle Datei: xxxxxx" und nach der Verarbeitung erscheint "Datei xxxxx wurde verarbeitet". Ich bekomme aber den ersten String von meiner Pipe nicht. Erst wenn das "child" im der hintergrundverabeitung fertig ist und den zweiten string printet bekommen ich wieder Daten von der pipe.

    Ich habe es schon mit dem u.g. Code versucht, leider ohne Erfolgt! Ich brauche eine richtige Pipe, welche die Daten ohne puffer in echtzeit darstellt.

    #include <stdio.h>
    #include <windows.h>
    #include <stdlib.h>
    
    int main( int argc, char *argv[] )
    {
    
    char psBuffer[128];
    FILE *chkdsk;
    
    if (argc == 1) {
    
    	fprintf(stderr,"%s\n","Please specify a binary");
    	ExitProcess(0);
    }
    
    /* Run DIR so that it writes its output to a pipe. Open this
    * pipe with read text attribute so that we can read it 
    * like a text file. 
    */
    if( (chkdsk = _popen( argv[1], "r" )) == NULL )
    exit( 1 );
    
    /* Read pipe until end of file. End of file indicates that 
    * CHKDSK closed its standard out (probably meaning it 
    * terminated).
    */
    while( !feof( chkdsk ) )
    {
    if( fgets( psBuffer, 128, chkdsk ) != NULL )
    printf( "\n\nOutput: %s\n", psBuffer );
    }
    
    /* Close pipe and print return value of CHKDSK. */
    printf( "\nProcess returned %d\n", _pclose( chkdsk ) );
    }
    

    Bitte um Hilfe, Danke!



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Log in to reply