一个函数如何返回两个值
我们知道 ac 函数永远不会返回多个值。那么 fork() 函数为什么会返回两个值呢?它是如何实施的?
We know that a c function never returns more than one value.Then how come the fork() function returns two values? How it is implemented?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
fork() 作为一种函数,一次仅返回一个值 - 但是,它会创建正在运行的可执行文件的副本,并在每个副本中返回不同的值。
fork() as a function only returns one value at a time - however, it creates a copy of your running executable, and returns a different value in each copy.
fork()
函数通过复制当前进程来启动一个新进程。如果有效,fork()
从父进程返回一件事,从子进程返回另一件事,以便其余代码知道哪个进程是“这个”进程。从某种意义上说,fork() 确实返回两个值,但与您可能想到的含义不同。执行此类操作的另一个函数是
setjmp()
(如果直接返回,则返回0
;如果我们通过 longjmp() 到达此处,则返回非零)代码>)。对于您所讨论的意义上返回两个值的 C 函数,通常是这样完成的:
并像这样调用:
这里,
return_2_values()
将两个返回值传递给同一个延续,而fork()
和setjmp()
分别向两个不同的延续返回一个值。The
fork()
function starts a new process by duplicating the current one. If it works,fork()
returns one thing from the parent process and another thing from the child process so that the remaining code knows which process is "this" process.fork()
, in a sense, does return two values, but not in the same sense as you might be thinking. Another function that does this type of thing issetjmp()
(which returns0
if returning directly and non-zero if we got here vialongjmp()
).For a C function to return two values in the sense you're talking about, it is often done like this:
and invoked like this:
Here,
return_2_values()
is passing both return values to the same continuation, whereasfork()
andsetjmp()
return one value each to two different continuations.fork()
仅返回一个值。它只是在不同的进程中返回不同的值。此行为的实现由操作系统管理。
fork()
only returns one value. It just returns different values different processes.The implementation of this behavior is managed by the OS.