Правильный вывод для этой концепции вилки в C

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

  1. Что значит int N = atoi(argv[i]); делать? это просто определить целое число N как массив?
  2. В цикле, что делает if (-1 = fork()) имею в виду? -1 означает ошибку или не правильный цикл? Это означает, что я не могу создать ребенка с помощью форка?
  3. Что это getpid() делать в вызове функции printf?
  4. И каким должен быть правильный вывод?

код:

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


int main (int argc, char* argv[] ) {
    int i;
    int N = atoi(argv[i]);
    printf("Create processes....\n");
    for (i = 0; i < N; i++) {
        if (-1 = fork())
            exit(1);
    }
    printf("Process id  = %d\n", getpid());
    fflush(stdout);
    sleep(1);
    return 0;
}

1 ответ

Решение

На многие вопросы, которые вы задали, можно ответить, просто заглянув в справочные страницы. В любом случае я постараюсь объяснить их.

1) int atoi(const char *str)str - это строковое представление целого числа. Эта функция atoi возвращает преобразованное целое число в виде значения типа int. Если действительное преобразование не может быть выполнено, оно возвращает ноль.

Что касается вашего кода, в нем хранится значение мусора. Так что ценность atoi(argv[i]))непредсказуемо. Вы можете назначить значение для i,

2) -1 == fork() (Я предполагаю, что вы допустили синтаксическую ошибку в своем коде, и вы уже поняли это), что происходит, мы проверяем возвращаемое значение функции fork(). Если проверить руководство, для создания используется fork() новый процесс. Если ему не удалось создать новый процесс, он возвращает -1. Было бы много смысла, если он написан как fork() == -1

3) getpid() возвращает идентификатор процесса вызывающего процесса. (Это часто используется подпрограммами, которые генерируют уникальные временные имена файлов.)

4) Что вы подразумеваете под правильным выводом? Вы пробовали запустить код и получили какие-либо ошибки? пожалуйста, дополните

Если вы запускаете исправленный код с аргументом командной строки, это выглядит как результат.

de@ubuntu:~/Desktop$ ./a.out 2
Create processes....
Process id  = 25405
Process id  = 25406
Process id  = 25408
Process id  = 25407
Другие вопросы по тегам