2012-03-06 43 views
6

thể trùng lặp:
Working of fork() in linux gccTại sao mã này in hai lần?

#include <stdio.h> 

void main() 
{ 
    printf ("ciao"); 
    fork(); 
} 

Tôi có một số ý tưởng về C tối ưu hóa nhưng tôi không chắc chắn. Hy vọng bạn biết câu trả lời.

+4

Bạn đã thử chạy chưa? – MByD

+2

Tôi không hoàn toàn chắc chắn rằng tôi hiểu câu hỏi. Nó khá rõ ràng những gì nó in. Ngoài ra, chính nên trả về một int, và những gì các chức năng ngã ba() không rõ ràng :) –

+0

Có nó in "ciaociao". Câu hỏi của tôi là về lý do tại sao nó in này. – gc5

Trả lời

14

Mã có thể in "ciao" hai lần khi đầu ra tiêu chuẩn được đệm IO để bộ đệm trong cho đầu ra tiêu chuẩn sẽ được nhân rộng trong quá trình con và cả hai bộ đệm được xả khi mỗi quá trình, cha và con, thoát.

Nó không liên quan đến tối ưu hóa.

4

khi fork() được gọi, cả hai quá trình cha mẹ và con thừa hưởng nó và do đó cả hai đều sẽ

in ra "ciao" khi họ tuôn bộ đệm. Nếu bạn gọi fflush (stdout);

trước khi gọi ngã ba nó sẽ chỉ in một lần

Các vấn đề liên quan