2016-05-31 8 views
0
funktioniert

Ich versuche ausführbare mit diesen c Code auszuführen:execv Linux printf nicht

int main(int argc, char *argv[]) 
    { 
    printf("hello.\n"); 
    sleep(2); 
    if (execlp("ls","ls","-l",NULL) == -1) 
      printf("Error occured during execute ls.\n"); 
    return 0; 
} 

warum printf ("Hallo \ n") funktioniert nicht? auch wenn ich schlafen lege?

+0

Es funktioniert gut für mich. Haben Sie beim Testen die Ausgabe umgeleitet? – Barmar

+0

Ich führe es im Terminal aus. ls funktioniert gut, aber es gibt kein "Hallo" gedruckt –

Antwort

1

Ihr Programm sollte funktionieren, wenn die Ausgabe an ein Terminal ist, aber es wird nicht korrekt funktionieren, wenn die Ausgabe in eine Datei oder eine Pipe umgeleitet wird. Wenn stdout nicht an ein Terminal angeschlossen ist, ist sein Ausgang vollständig gepuffert. Der Aufruf einer exec-Funktion löscht den Puffer nicht, bevor der aktuelle Prozess durch das neue Programm ersetzt wird. Daher ist jede gepufferte Ausgabe sehr umfangreich.

Anruf fflush(stdout); vor dem Aufruf execlp() und das Problem sollte behoben werden. Sie müssen nicht schlafen, es hat keine Auswirkungen auf die Ausgabe.

#include <stdio.h> 
#include <unistd.h> 

int main(int argc, char *argv[]) 
    { 
    printf("hello.\n"); 
    fflush(stdout); 
    if (execlp("ls","ls","-l",NULL) == -1) 
      printf("Error occured during execute ls.\n"); 
    return 0; 
} 
+0

danke für die Antwort –

+0

@ILyaShapira Sie können die Antwort akzeptieren, wenn es Ihr Problem gelöst hat. –

+0

was meinst du akzeptieren –