0

〜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);
}
}
4

2 回答 2

8
pid_t pid = ~fork();

是相同的

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

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

这就是孩子和父母都执行给定部分的原因。

也可以看看:

于 2012-10-08T10:34:26.017 回答
3

~只是翻转返回的值的位fork()

于 2012-10-08T10:35:04.290 回答