2010-05-13 29 views
3

我想創建一個服務器和一個客戶端(兩個單獨的程序),其中服務器創建兩個命名管道(我猜這是最低要求雙向流量的流量),然後 客戶端啓動,客戶端和服務器應該能夠發送和接收數據兩種方式 所有的時間(全雙工類型)。我認爲這將需要我有非阻塞命名管道。想要一些幫助,因爲我已經能夠創建半雙工通信類型 ,但努力實現客戶端和服務器之間的連續無縫數據傳輸。需要在Linux上使用非阻塞命名管道在c上進行雙向通信

感謝

+0

您想通過網絡進行進程間通信或客戶端服務器嗎? – clyfe 2010-05-13 10:28:40

+0

進程間通信不是網絡thingy。 – kush87 2010-05-13 10:41:47

回答

5

可能的選項:

  1. 本地域套接字:AF_LOCAL家庭與SOCK_STREAM,SOCK_DGRAM,SOCK_SEQPACKET類型。套接字可以是「內存中」,這意味着您使用唯一字符串連接到它,或者它可以是文件系統中的套接字文件。它和任何網絡套接字一樣工作,全雙工。

  2. 兩個管道:一個用於閱讀,一個用於書寫(反之亦然)。跟蹤本地域套接字可能會更復雜一些,以跟蹤兩個管道。

Helpful link查看管道上的部件和Unix套接字上的部件。

+1

同意 - 'AF_UNIX' /'AF_LOCAL'套接字真的是你想要的。 – caf 2010-05-14 00:45:59

+0

嗨, 我知道我應該使用套接字用於這種目的,但需求是管道。 我已經使用兩個命名管道(一個用於讀取,一個用於寫入)編寫代碼,並且已經能夠實現雙向數據流。 邏輯是這樣的,我打開一個有O_NONBLOCK標誌讀取命名管道,啓動一個無限循環嘗試讀取內容,如果它返回多於0字節,我打開另一個管道寫入(與標誌O_NONBLOCk)並寫入內容收到該管道並關閉它。 這是我解釋的服務器代碼。它可以工作,但是當它啓動時,它幾乎需要我所有的cpu。 – kush87 2010-05-14 05:49:09

+0

我該如何降低CPU使用率。請幫忙。 – kush87 2010-05-14 05:49:33

0

您是否考慮過使用select()來處理讀命名管道?

相關問題