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;

別の関数ではなく、ビット単位の not 演算子を使用しているだけです。これにより、実際には fork の戻り値が役に立たなくなることに注意してください。これは、子が~0 == 0xff(または別のゼロ以外の値) を取得するのに対し、親は~child_idwhich child_idis notMAX_PIDの場合、非ゼロも取得するためです。

そのため、子と親の両方が指定されたセクションを実行します。

以下も参照してください。

于 2012-10-08T10:34:26.017 に答える
3

~によって返された値のビットを反転するだけですfork()

于 2012-10-08T10:35:04.290 に答える