2013-11-22 47 views
0

在C語言:兩兄弟怎麼聯繫?

我有一個父親,通過fork()讓兩個兒子在一個循環,我想每一個兒​​子將(在將爲pid_t型)弟弟的進程ID。

我嘗試通過管道做這件事,但我沒有成功。 你知道我該怎麼做?

我通過(write(pos[1],getpid(),sizeof(pid_t))這樣做(這個兒子送他的兄弟他的PID) ,但它不工作...

謝謝!

回答

2

寫入需要一個指向要寫入的數據的指針。 getpid返回進程ID,而不是指向進程ID的指針。你需要的返回值從getpid存儲變量:

pid_t pid = getpid(); 
write(pos[1], &pid, sizeof(pid_t); 

我假設POS [1]持有管同級的文件描述符。

+0

現在,它的工作我以前嘗試過類似的東西,但我沒有成功。 謝謝! – Yoar

2

通常,兄弟進程無法通過管道相互通信。但是,您可以讓父母將其他兄弟姐妹的pid發送給每個兄弟姐妹。要做到這一點,你當然需要建立兩個管道,每個孩子一個。

parent 
    /\ 
/\ 
/ \ 
son1 son2 

父將需要一次創建一個兒子,那麼當它知道這兩個已經成功啓動,它可以發送每個子進程兄弟的PID,每個。

+0

我可以通過named_pipe做到這一點? – Yoar

+0

@unwind爲什麼他們不能? – Zhongzhi

+0

@Zhongzhi:[他們可以](https://gist.github.com/zed/1f96e0237a66cb541fdc#file-send-pid-to-brother-c-L58)。 – jfs