Правильный вывод для этой концепции вилки в C
По какой-то причине я не могу получить вывод этого кода на C, поэтому я могу задать только несколько концептуальных вопросов по этому коду ниже:
- Что значит
int N = atoi(argv[i]);
делать? это просто определить целое число N как массив? - В цикле, что делает
if (-1 = fork())
имею в виду? -1 означает ошибку или не правильный цикл? Это означает, что я не могу создать ребенка с помощью форка? - Что это
getpid()
делать в вызове функции printf? - И каким должен быть правильный вывод?
код:
#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