2016-05-31 3 views
0

Я пытаюсь запустить исполняемый файл с помощью этого кода на C:Execv Linux Printf не работает

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; 
} 

почему Е ("привет \ п") не работает? даже если я спал?

+0

Это прекрасно работает для меня. Вы перенаправляли выход, когда вы его тестировали? – Barmar

+0

Я выполняю его в терминале. ls работает хорошо, но нет «привет» напечатано –

ответ

1

Ваша программа должна работать, когда вывод относится к терминалу, но он не будет работать корректно, если выход перенаправляется в файл или канал. Когда 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; 
} 
+0

спасибо за ответ –

+0

@ILyaShapira Вы можете принять ответ, если он решил вашу проблему. –

+0

Что значит принимать –

Смежные вопросы