2016-05-28 14 views
1

ich ein kleines Problem mit diesem haben:execl & printf - um

{ 
    printf ("abc"); 
    execl("./prog","prog",NULL); 
} 

Alle funktioniert gut, aber warum execl laufen kurz vor printf? Könnte mir jemand helfen?

+3

Versuchen 'printf ("abc"); fflush (stdout); ' – Marian

+0

OT: Es sollte' execl (..., (char *) NULL); 'sein. – alk

+1

Zeilenpufferung: Die Ausgabe von 'printf()' wird nicht erzwungen, es sei denn, Sie aktivieren No-Buffering (fügen Sie einen Newline hinzu und es würde normalerweise erscheinen; pipe die Ausgabe des Programms und sogar ein Newline wird nicht helfen, aber ' fflush() 'wird). Die Funktionen in der Funktionsfamilie ['execl()'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/execl.html) "fugen" die Standard-E/A-Puffer des aufrufenden Programms nicht. –

Antwort

6

Die printf wird tatsächlich zuerst ausgeführt, jedoch ist die Ausgabe gepuffert.

Sie den Puffer spülen kann entweder durch eine neue Zeile hinzugefügt (\n) bis zum Ende des Strings oder durch den Aufruf fflush(stdout):

printf("abc\n"); 

Oder:

printf("abc"); 
fflush(stdout);