Ваша программа должна работать, когда вывод относится к терминалу, но он не будет работать корректно, если выход перенаправляется в файл или канал. Когда stdout
не подключен к терминалу, его выход полностью буферизуется. Вызов функции exec
не сбрасывает буфер перед заменой текущего процесса на новую программу, поэтому любой буферизованный вывод является большим.
Позвоните по телефону fflush(stdout);
, прежде чем звонить execlp()
, и проблема должна быть решена. Вам не нужно спать, это не влияет на выход.
#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;
}
Это прекрасно работает для меня. Вы перенаправляли выход, когда вы его тестировали? – Barmar
Я выполняю его в терминале. ls работает хорошо, но нет «привет» напечатано –