2010-06-26 73 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,如果它足够简单,你只需要读取从另一个程序馈入的几个字节。否则,本地域套接字很适合运行简单的协议。