Я работаю над упражнением по учебнику «Концепции операционных систем, 7-е издание», и я немного не понимаю, как fork ()
работают. Насколько я понимаю, fork ()
создает дочерний процесс, который выполняется одновременно со своим родителем. Но тогда как нам точно узнать, какой процесс запускается первым? Я имел в виду порядок выполнения.
Проблема
Напишите программу на C, используя системный вызовfork ()
, который генерирует последовательность Фибоначчи в дочернем процессе. Номер последовательности будет указан в командной строке.
Это мое решение:
#include <sys/types.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
void display_fibonacci_sequence( int n ) {
int i = 0;
int a = 1;
int b = 1;
int value;
printf( "%d, %d, ", a, b );
for( ;i < n - 2; ++i ) {
value = a + b;
printf( "%d, ", value );
a = b;
b = value;
}
printf( "\n" );
}
int main( int argc, char** argv ) {
int n;
pid_t pid;
pid = fork();
if( argc != 2 ) {
fprintf( stderr, "Invalid arguments" );
exit( -1 );
}
n = atoi( argv[1] );
if( pid < 0 ) {
fprintf( stderr, "Fork failed" );
exit( -1 );
}
else if( pid == 0 ) {
display_fibonacci_sequence( n );
}
else { // parent process
// what do we need to do here?
}
}
Если честно, я не вижу никакой разницы между использованием fork
и неиспользованием fork
. Кроме того, если я хочу, чтобы процесс родительский обрабатывал ввод от пользователя, а дочерний процесс ] обрабатывал отображение, как я могу это сделать?