2013-01-07 40 views
1

我有一個父進程和n個等待從網絡接收信息的子進程。事情是,從網絡接收到的每個消息我都需要告訴父親消息包含了什麼。如果我嘗試在父親和孩子之間製作一個管道或一個套接字,然後父親不知道信息在哪裏結束,另一個在哪裏開始。你能幫忙嗎?linux fork通信

+1

看一看IPC(InterProcessCommunication)。有很多可能性(共享mem,管道......)。 – Burkhard

+0

你是什麼意思,「不知道消息在哪裏結束,又在哪裏開始」?你能否詳細說明一下? –

+0

您需要爲發送消息定義自己的協議。 –

回答

2

您正在使用面向流的管道/插座對之前socketpair使用一些分隔符。所以你失去了消息的界限。

使用面向數據報的套接字來保留消息邊界。

有關基於數據報的unix套接字和套接字對的更多信息,請參閱mapage unix(7)

有可能對你適合的功能:

socket(AF_UNIX, SOCK_DGRAM, 0); 
    socketpair(AF_UNIX, SOCK_DGRAM, 0, int *sv); 
1

之前寫入管道或讓每一個孩子補充說,分隔符的消息發送給父親