как функция может вернуть два значения - PullRequest
2 голосов
/ 12 августа 2010

Мы знаем, что функция ac никогда не возвращает более одного значения. Тогда почему функция fork () возвращает два значения?Как это реализовано?

Ответы [ 3 ]

5 голосов
/ 12 августа 2010

fork () как функция возвращает только одно значение за раз - однако она создает копию вашего исполняемого файла и возвращает другое значение в каждой копии .

4 голосов
/ 12 августа 2010

Функция 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() возвращают одно значение каждому двум различным продолжениям.

1 голос
/ 12 августа 2010

fork() возвращает только одно значение. Он просто возвращает разные значения разных процессов.

Реализация этого поведения управляется ОС.

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