fork()和~fork()之间有什么区别

时间:2012-10-08 10:32:46

标签: c operating-system fork

如何〜fork()函数调用不同于简单的fork().. 我尝试了以下代码..在这个偶数孩子正在执行父节的代码。

main()
{
pid_t pid = ~fork();
int a = 2;
int *ptr = (int*)malloc(sizeof(int));
*ptr = 2;
if(pid == 0)
{
    a = a + 3;
    *ptr = *ptr + 2;
    printf("value at a and ptr in child process : %d and %d\n" , a , *ptr);
    printf("address a and ptr in child process : %p and %p\n" , &a , ptr);
}
else
{
    printf("value at a and ptr in parent process : %d and %d\n" , a , *ptr);
    printf("address a and ptr in parent process : %p and %p\n" , &a , ptr);
}
}

2 个答案:

答案 0 :(得分:8)

pid_t pid = ~fork();

相同
pid_t temporary = fork();
pid_t pid = ~temporary;

您只是使用按位非运算符,而不是其他函数。请注意,这实际上会使fork的返回无效,因为子将获得~0 == 0xff(或其他非零值),而父将获得~child_id,如果child_id不是MAX_PID,也是非零。

这就是为什么child和parent都执行给定部分的原因。

另见:

答案 1 :(得分:3)

~只是翻转fork()

返回的值的位