众所周知,在Linux中,每个进程都会调用fork()。它将返回 0 或 1 作为正常或 -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("parentn");
else
printf("childn");
_exit (0);
}