Как я могу напечатать несколько вещей подряд, используя только fork () и если? - PullRequest
0 голосов
/ 12 сентября 2018

после нескольких часов поисков я оказался здесь. Вот моя проблема:

У меня есть упражнение, которое мне нужно сделать. Код, указанный ниже:

int main(){
int x,y,z....;
//

fill the gap

//
printf("A");
//

fill the gap

//
printf("B");
return(0);
}

Я должен напечатать точно "AAAAABBB" с использованием ONLY fork (), if и exit (). (без «wait», без нескольких «printf», без «sleep». no «for»)

Как я мог это сделать? Я проверил это в онлайн IDE, но я не могу распечатать их именно таким способом. Вывод всегда сбивает с толку (AABBBAA, ABABABAA и т. Д.) Я не могу понять, как отдать приоритет родителю или ребенку, не используя ничего, кроме fork () и if.

Любой отзыв приветствуется.

1 Ответ

0 голосов
/ 12 сентября 2018

То, что вы должны изучать здесь, это то, что fork () дублирует ваш процесс - в точке fork ().Он возвращает Process IDentifier (PID) number в родительский процесс и zero в дочерний процесс.

Таким образом, просто наблюдая за возвратом fork ()путь выполнения может определить, являются ли они родительским или дочерним процессом.

Таким образом, чтобы реализовать проблему, я использовал метод управления всем из одного родительского процесса, и чтобы потомок просто выводил букву, затемexit () - который завершает процесс.

Было бы намного лучше с циклом for (), но это было запрещено.

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

int main()
{
    int pid = fork();
    if (pid != 0)
        pid = fork();
    if (pid != 0)
        pid = fork();
    if (pid != 0)
        pid = fork();
    if (pid != 0)
        pid = fork();

    if (pid == 0)
    {
        // child process only
        printf("A");
        exit(0);
    }

    pid = fork();
    if (pid != 0)
        pid = fork();
    if (pid != 0)
        pid = fork();
    if (pid == 0)
    {
        // child process only
        printf("B");
        exit(0);
    }

    return 0;
}

Примечание: я подозреваю , что он может иногда смешиватьсяиз-за загрузки системы, планирования и т. д. Но во всех моих тестах я получил правильный ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...