【问题标题】:Communication between two application in the same local machine同一本地机器中的两个应用程序之间的通信
【发布时间】:2011-03-08 13:16:38
【问题描述】:

我使用 C 语言和 Linux 作为我的编程平台。

我正在开发一个在后台运行的用户空间应用程序,就像一个守护进程。我的问题是,我想要另一个用户空间应用程序与这个守护进程通信。

我知道我必须使用进程间通信方法,但我不知道正确的实现是什么。

但是在我的通信实现中使用 IPC 是我的另一个选择。其实我只是想通过使用另一个应用程序来改变我的守护进程的属性。请看下面的情景:

  1. 我的守护进程在后台运行。
  2. 然后某些应用程序将控制守护程序的属性,例如睡眠延迟时间。

我的第一个选择是访问具有属性值的文件。这样我的守护进程就会轮询该值。而其他应用程序将更改该值。

我不确定我的选择是否有效。请指教。

谢谢。

【问题讨论】:

    标签: c linux


    【解决方案1】:

    更新配置文件并发送信号以导致重新读取是一种标准做法,既便宜又容易。

    【讨论】:

      【解决方案2】:

      您正在寻找D-Bus。将初始值存储在文件中,然后通过 D-Bus 侦听更改它的请求。

      【讨论】:

      • gconf/dconf/xfconf 几乎完全按照他们的意愿行事(后两个是基于 dbus 的)
      【解决方案3】:

      Unix 域套接字是一种简单的 IPC 方法。

      【讨论】:

      • 实际上,我计划创建一个共享库,以便任何应用程序都可以使用这些 API 与守护进程通信。在这种实现中是否可以使用域套接字?
      【解决方案4】:

      如果我是你,我会完全放弃 IPC,而是让守护进程监控配置文件以进行更改。仅当您要每秒发送数千条消息并且开销将变得无法忍受时,才真正需要 IPC。

      inotify 是文件监控的一个选项。

      【讨论】:

      • 谢谢,我只会发送信号而不是使用 inotify。
      • 我同意在这种情况下使用配置文件,但我完全不同意 IPC 只能用于每秒数千条消息。
      【解决方案5】:

      如果它足够简单以至于您只需要读取从另一个程序输入的几个字节,我会让守护进程在管道/fifo 上进行侦听。否则,本地域套接字可以很好地运行一个简单的协议。

      【讨论】:

        猜你喜欢
        • 2012-02-14
        • 2011-08-06
        • 2012-12-28
        • 1970-01-01
        • 1970-01-01
        • 2016-02-27
        • 2016-07-27
        • 2011-06-06
        相关资源
        最近更新 更多