代码之家  ›  专栏  ›  技术社区  ›  andrewrk

通过命令行向程序发送消息

  •  8
  • andrewrk  · 技术社区  · 17 年前

    当它运行时 . 这意味着它必须以某种方式发送其他进程数据,然后退出。例如,我需要能够做到:

    ./Host --blahblah 3 6 3 5
    

    这应该会以某种方式结束调用主机调用中的某个函数

    handleBlahBlah(int x1, int y1, int x2, int y2){
      //do some more sweet stuff
    }
    

    主机是一个C程序,不需要支持多个实例。

    例如Amarok音乐播放器。在Amarok运行和播放时,您可以输入“Amarok--pause”,它将暂停音乐。

    我需要能够在Linux或Windows下实现这一点。最好是Linux。

    6 回复  |  直到 15 年前
        1
  •  10
  •   Derek Park    17 年前

    如果你在Windows上,我会告诉你用一个隐藏的窗口来接收消息,但是由于你使用了 ./ ,我想你想要的是基于Unix的。

    named pipe tutorial

    程序可能会创建管道并监听。您可以有一个单独的命令行脚本,它将打开管道并将其命令行参数回送给它。

    你呢

        2
  •  6
  •   Stu    17 年前

        3
  •  4
  •   T Percival Daniel Gehriger    17 年前

    我建议使用 Unix socket D-Bus . 如果您熟悉unixsockets编程并且只需要一些操作,那么使用socket可能会更快,而D-Bus可能会使您更容易以熟悉的面向对象的方式集中精力实现功能。

    看看 Beej's Guide to Unix IPC 尤其是关于 Unix sockets

        4
  •  1
  •   pbernatchez    15 年前

    这里没人说过:

    命令行仅在调用程序时可用。

    “调用”的示例 争论…“来交流 填充名 一旦 填充名 只能通过使用两个相互通信的程序实例来完成。

    其他的答案提出了实现沟通的方法。

    阿玛洛克 为了知道它必须扮演什么角色,它的主要角色 消息发送者。

        5
  •  0
  •   bta    15 年前

    我见过的一个技巧是 Host ./Host ),程序将进入你的代码的“主应用程序”部分。当您以一种建议您要向正在运行的实例发送信号的方式启动程序时(例如: ./Host --send-message restart fork 就是制造 主持人 Host_core )那个 可以单独启动。

    pipes sockets . 根据您的操作系统,您可能有其他可用的选项;例如,QNX有 channels BeOS/俳句 BMessages . 您还可以找到一个库,它将此功能整齐地包装起来,例如 lcm .

        6
  •  -2
  •   Ed Swangren    17 年前

    所以,我可能没有抓住要点,但是deafult一个C程序的主函数有两个参数:argc,参数个数(至少一个)和argv(或arg vector),参数列表。您可以只解析参数并调用正确的方法。 例如:

     int main(int argc, *argv[])
     {
         /*loop through each argument and take action*/
          while (--argc > 0)
          {
               printf(%s%s, *++argv, (argc > 1) ? " " : "");
          }
     } 
    

    编辑:好吧,他在找别的东西,但在问题被编辑之前还不太清楚。不必对我的代表下手。。。