2010-09-26 69 views
1

爲了允許進程間通信,我必須在SOLARIS 9 SPARC上的C上實現一些機制。UNIX上的進程間通信

簡而言之,我必須實現一個多線程程序,其中線程的父親一旦收到信號或任何你想要的,必須觸發一組負責加密文件的線程。

我無法使用某些TCP套接字解決方案與此程序進行通信。

我正在考慮使用系統信號(並通過kill -s SIGNAL PID觸發進程)或域unix套接字。

您認爲如何?你能建議我一些其他解決方案嗎?

+0

我發現你的問題不完全清楚。這些「正義」進程還是這些POSIX線程都是由同一進程創建的? – 2010-09-26 17:21:27

+0

有一個進程X管理多線程......還有一些其他進程或UNIX命令必須觸發進程X – Kerby82 2010-09-26 17:52:44

回答

3

其他解決方案:共享內存段,流水線,Unix套接字(嘿,他們不是TCP :)),...

+0

0反對接受 \t 您是否有一些示例,或者您是否可以指向某些資源你的建議? 我的意思是一些基本的c例子! 非常感謝! – Kerby82 2010-09-26 16:20:27

+0

請查看http://en.wikipedia.org/wiki/Inter-process_communication,http://beej.us/guide/bgipc/output/html/multipage/unixsock.html和http://www.cs。 cf.ac.uk/Dave/C/node27.html – Timothy 2010-09-26 16:32:42

0

如果我明白你的問題,看看POSIX message queues,特別mq_notify()。您可以通過消息隊列進行通信,並將其設置爲在收到消息時自動產生線程。該線程讀取隊列中的文件名和其他內容並進行加密。

2

您怎麼看?你能建議我一些其他解決方案嗎?

信號是一個非常好的解決方案,比許多簡單。我可能會自己使用它。其他大多數更改主機環境會使流程活躍起來,並且/或者使得難以同時運行多個系統副本(因爲您必須自己管理不同的文件名,端口號,共享內存ID等,而OS已經跟蹤PID並允許它們作爲殺死目標)。

不過,如果您想要另一個選項,命名管道非常非常易於使用。在你的shell中,只需「mkfifo xyz」在當前目錄下創建一個名爲「xyz」的管道。然後你可以讓你想要發信號的線程讀取管道,然後echo "go boy go" > xyz進入管道,你的控制線程將退出read()。