2013-10-09 2 views
1

у меня написать программу на С и запустить его в Ubuntu, основной код следовать:О процессе и сна()

int main(){  
    pid_t pid=fork(); 
    if(pid==0){ 
     printf("d"); 
     exit(0); 
    } 
    else{ 
     printf("a"); 
     sleep(4); 
    } 
} 

Возникает вопрос: почему код sleep(4); запустить до того printf("a");

надеюсь кто-то может дать мне ответ, спасибо!

ответ

4

Это не так. Скорее всего, printf() буферизует свой вывод до получения вывода буфера (в вашем случае, когда процесс завершается).

+1

Да и OP должны использовать либо '\ n', либо' fflush (stdout) ' –

3

Вопрос: почему код сна (4) запускается перед printf ("a")?

A: Е ("а") на самом деле работает ПЕРЕД "сна (4)", так же, как вы видите в коде.

Однако, это не DISPLAY немедленно.

Проблема «буферизация».

Посмотрите здесь для более подробной информации:

РЕКОМЕНДУЕМЫЙ АЛЬТЕРНАТИВА:

pid_t pid=fork(); 
if(pid==0){ 
    fprintf(stderr, "d"); 
    exit(0); 
} 
else{ 
    fprintf(stderr, "a"); 
    sleep(4); 
} 

Причина в том, что «stderr» не загружен: вы сразу увидите результат.

Альтернативы использованию stderr включают вызов fflush(stdout) или modifying the stream.

2

Это не так, но может показаться таким. printf помещает свой вывод в буфер, который, вероятно, только размывается после запуска sleep. Попробуйте поместить вызов fflush(stdout) после printf, но перед вызовом sleep.

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