2012-10-08 59 views
1

how〜fork()函數調用是不同的然後簡單的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); 
} 
} 
+3

返回值的位'〜'是不是運營商。這裏的代碼沒有任何意義。 – nhahtdh

+1

你從哪裏得到了使用'〜fork()'或者有一個名爲'〜fork'的獨立函數的想法? –

+2

有人在OP上玩弄詭計,看起來他爲此而墮落。 (但是,正確的答案是'〜fork'的返回值應該與'〜0'比較,這是一個專門用於測試'〜fork'返回值的內置常量。) –

回答

8
pid_t pid = ~fork(); 

相同

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

你只需使用位不是運營商,而不是其他的功能。請注意,這實際上會使叉的返回無用,因爲子將得到~0 == 0xff(或另一個非零值),而父母將得到~child_id,即如果child_id不是MAX_PID,也是非零。

這就是爲什麼孩子和父母都執行給定部分。

參見:

+0

感謝您的澄清。 –

相關問題