popen gibt mir fehler zurueck



  • Hallo,
    muss euch nur noch mal um eure Hilfe bitten.
    Und zwar handelt es sich um folgenden Code:

    if ( ( fin = popen( msg, "r" ) )  == NULL ) 
    	{ 
                    fprintf( stderr, "popen() failure!\n" );
    				return 1;
    	}
    
    	while ( fgets( buffer, sizeof( buffer ), fin ) != NULL ) 
    	{
    		fprintf( stdout, "%s", buffer );
    	}
    	result = pclose( fin );
    
    	fprintf( stderr, "Errno: %d\n", errno );
    

    Ergebnis:
    Error code 10: No child processes

    Was heisst das jetzt? Der Code wird bereits in einem Kindprozess ausgefuehrt.
    Wenn ich popen richtig verstanden habe dann oeffnet es eine Pipe zur Shell und fuehrt den Befehl aus, der uebergeben wurde.
    Mit pclose warte ich darauf, dass der Prozess beendet ist und zurueckkehrt.
    pclose liefert mir aber -1 zurueck!
    Nun meine Frage - wieso -1, sollte doch alles Korrekt sein, oder?

    mfg



  • popen(3) schrieb:

    The popen() function returns NULL if the fork(2) or pipe(2) calls fail,
    or if it cannot allocate memory.

    The pclose() function returns -1 if stream is not associated with a
    ``popened'' command, if stream already ``pclosed'', or if wait4(2)
    returns an error.

    es waere ganz interessant, was in msg steht. koennte ja sein, dass du da irgendwas vermutest...



  • In msg stehen kommmandos die vom benutzer eingegeben werden koennnen. Daran haeng ich dann noch das \0-Zeichen wie es gaub ich verlangt wird!
    Dass ein falsches Kommando eingegeben wurde, damit haengt es sicher nicht zuammen, denn selbst wenn ich einen Befehl statisch hinenschreibe erhalte ich das selbe ergebnis!


Anmelden zum Antworten