2010-06-26 70 views
5

我使用C語言和Linux作爲我的編程平臺。兩個應用程序在同一本地計算機上的通信

我正在開發一個在後臺運行的用戶空間應用程序,就像一個守護進程。而我的問題是,我希望另一個用戶空間應用程序與這個守護進程進行通信。

我知道我必須使用進程間通信方法,但我不知道什麼是正確的實現。

但在我的通信實施中使用IPC是我的另一種選擇。其實我只是想通過使用另一個應用程序來更改我的守護進程的屬性。請參閱下面的senario:

  1. 我的守護進程在後臺運行。
  2. 然後一些應用程序將控制守護進程的屬性,如睡眠延遲時間。

我的第一個選擇是通過訪問具有屬性值的文件。所以我的deamon會調查這些價值。而另一個應用程序將改變這個值。

我不確定我的選擇的效率。請指教。

THanks。

回答

4

更新配置文件併發送信號以重新讀取是一種標準操作,既便宜又簡單。

3

您正在尋找D-Bus。將初始值存儲在文件中,然後通過D-Bus偵聽請求以更改它。

+0

gconf/dconf/xfconf全部都做得非常正確(而後兩個是基於dbus的) – Spudd86 2010-06-27 02:36:03

2

Unix域套接字是一種簡單的IPC方法。

+0

實際上,我打算創建一個共享庫,以便任何應用程序都可以使用這些API與守護進程進行通信。在這種實現中可以使用域套接字嗎? – domlao 2010-06-26 04:57:01

2

如果我是你,我會完全放棄IPC,而是讓守護進程監視一個配置文件的變化。如果您要每秒發送數千條消息並且開銷會變得無法忍受,那麼IPC纔是真正需要的。

inotify是文件監視的選項。

+0

謝謝,我只是發送信號,而不是使用inotify。 – domlao 2010-06-26 06:03:00

+0

我同意在這種情況下使用配置文件,但我完全不同意IPC應該只用於每秒數千條消息的情況。 – BobbyShaftoe 2010-06-26 07:45:02

1

我會讓守護進程監聽一個管道/ FIFO,如果它足夠簡單,你只需要讀取從另一個程序饋入的幾個字節。否則,本地域套接字很適合運行簡單的協議。