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;
}
Es funktioniert gut für mich. Haben Sie beim Testen die Ausgabe umgeleitet? – Barmar
Ich führe es im Terminal aus. ls funktioniert gut, aber es gibt kein "Hallo" gedruckt –