我们知道c函数永远不会返回多个值。那么fork()函数如何返回两个值呢?它是如何实现的?
答案 0 :(得分:5)
fork()作为一个函数一次只返回一个值 - 但是,它会创建正在运行的可执行文件的副本,并在每个副本中返回一个不同的值。
答案 1 :(得分:4)
fork()
函数通过复制当前的进程来启动新进程。如果它工作,fork()
从父进程返回一个东西,从子进程返回另一个东西,以便剩下的代码知道哪个进程是“this”进程。
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()
将每个值返回两个不同的连续符。
答案 2 :(得分:1)
fork()
只返回一个值。它只返回不同的值不同的进程。
此行为的实现由操作系统管理。