2017-02-20 18 views
-4

Я пытаюсь получить выходные данные этой программы, но, похоже, она отличается от среды, в которой я ее запускаю.Получение различных выходов для программы C? Что должна выводить эта программа?

Является ли ABCADEABC или ABCABCADE или ABCADE или EABCDBC или EABCCD?

Я считаю, что я должен получать ABCABCADE, но интересно, почему я получаю разные результаты, когда они являются одним и тем же кодом?

Что я должен получать?

#include <stdio.h> 
#include <unistd.h> 
#include <wait.h> 

int main(void) { 
int pid; 

    pid= fork(); 
    if (pid == 0) { 
     fprintf(stdout, "A\n"); 
     pid= fork(); 
     if (pid==0) { 
      fprintf(stdout, "B\n"); 
      pid=fork(); 
      fprintf(stdout, "C\n"); 
     } 
     else { 
      wait(NULL); 
      fprintf(stdout, "D\n"); 
     } 
    } 
    else { 
     fprintf(stdout, "E\n"); 
     wait(NULL); 
    } 
    // your code goes here 
    return(0); 
} 
+3

Пожалуйста, отправьте код в виде текста, который может быть скопирован/вставлен скомпилирован и запущен. Опубликуйте [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve), который показывает проблему. Будьте ясны относительно ввода, ожидаемого выхода и фактического вывода. Все, что у нас есть, это ссылка на изображение и некоторые вафли ABC. Укажите среду, в которой она работает/не работает. –

+0

Отправьте код в тексте, а не изображения. Вырежьте и вставьте код в вопрос и отступьте его, выбрав его и набрав Alt-K – chqrlie

+0

исправил его, надеюсь – Kyle

ответ

0

Планировщик операционной системы позволяет запускать процессы в любом порядке, он хочет, так что нет никакой гарантии, в каком порядке заявления будут выполняться. Хороший алгоритм планирования на современной операционной системы будет учитывать многие факторы, например, как связанный с IO процесс и сколько времени выполнения он использовал, - и превентивные переключатели контекста могут происходить, возможно, ~ 60 раз в секунду. Мы не можем точно определить, как эти факторы будут развиваться по мере того, как наши процессы будут запущены, возможно, сотнями других в системе, поэтому для операторов не существует правильного порядка.

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

  • Нет связанных вопросов^_^