众所周知,每个进程都会在Linux中调用fork()。它将返回0或1正常或-1表示错误。但是,我不知道如何创建一个可以同时具有两个值的变量。你能给我点点滴滴来帮我实现吗?
答案 0 :(得分:1)
没有一个变量有两个值。有两个变量,一个在父项中,一个在子项中,每个变量只有一个值。 fork
调用返回两次。该过程就好像被复制一样。
如果您有兴趣了解fork
的实施方式,建议您先查看实际实施情况。考虑:
bool is_child()
{
pid_t pid = getpid();
// some system call that returns twice (like 'clone')
return (getpid() == pid);
}
这里有一个函数,其返回值取决于它返回的进程。如果您执行j = is_child();
,则变量j
将在父级false
和子级中的true
。
这是一个完整的工作示例:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
bool my_fork()
{
pid_t pid = getpid();
fork(); // we ignore the return value
return pid == getpid();
}
int main(void)
{
bool j = my_fork();
if (j)
printf("parent\n");
else
printf("child\n");
_exit (0);
}