2016-05-28 5 views
1

У меня есть небольшая проблема с этим:execl & Printf - заказ

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

Все работает отлично, но почему execl просто запустить, прежде чем printf? Может кто-нибудь мне помочь?

+3

Попробуйте 'Е ("а"); fflush (stdout); ' – Marian

+0

OT: Это должно быть' execl (..., (char *) NULL); '. – alk

+1

Буферизация строк: вывод из 'printf()' не вытесняется, если вы не включили no-buffering (добавьте новую строку, и она обычно появится; pipe вывод программы и даже новая строка не помогут, fflush() 'будет). Функции в семействе функций '' execl() '] (http://pubs.opengroup.org/onlinepubs/96999197/functions/execl.html) делают _not_ зачистки стандартных буферов ввода-вывода вызывающей программы. –

ответ

6

printf фактически запускается первым, однако его вывод буферизуется.

Вы можете очистить буфер либо путем добавления новой строки (\n) до конца строки или по телефону fflush(stdout):

printf("abc\n"); 

Или:

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