Функция fork()
запускает новый процесс, дублируя текущий. Если это работает, fork()
возвращает одну вещь из родительского процесса и другую вещь из дочернего процесса, чтобы оставшийся код знал, какой процесс является «этим» процессом.
fork()
, в некотором смысле, возвращает два значения, но не в том смысле, в котором вы думаете. Еще одна функция, которая делает подобные вещи, это setjmp()
(которая возвращает 0
, если возвращается напрямую, и ненулевая, если мы получили здесь через longjmp()
).
Чтобы функция C возвращала два значения в том смысле, о котором вы говорите, это часто делается так:
int return_2_values(int *other)
{
*other = 2;
return 1;
}
и вызывается так:
int b;
int a = return_2_values(&b);
/* a is now 1, and b is now 2 */
Здесь return_2_values()
передает оба возвращаемых значения одному и тому же продолжению, тогда как fork()
и setjmp()
возвращают одно значение каждому двум различным продолжениям.