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

and*_*wrk 9 c architecture io command-line

我有这个程序,我们称之为Host.主机做各种好事,但它需要能够在运行时通过命令行接受输入.这意味着它必须以某种方式发送其他进程数据然后退出.例如,我需要能够这样做:

./Host --blahblah 3 6 3 5
Run Code Online (Sandbox Code Playgroud)

这应该以某种方式最终调用Host中的一些函数调用

handleBlahBlah(int x1, int y1, int x2, int y2){
  //do some more sweet stuff
}
Run Code Online (Sandbox Code Playgroud)

Host是一个C程序,不需要支持多个实例.

一个例子是Amarok音乐播放器.随着Amarok的运行和播放,你可以输入"amarok --pause",它会暂停音乐.

我需要能够在Linux或Windows中执行此操作.最好是Linux.

实现这个的最简洁方法是什么?

Der*_*ark 8

如果您在Windows上,我会告诉您使用隐藏窗口来接收消息,但是自从您使用以来./,我认为您需要基于Unix的东西.

在那种情况下,我会使用命名管道.Sun有一个关于命名管道的教程可能很有用.

该程序可能会创建管道和监听.你可以有一个单独的命令行脚本来打开管道,只是回显它的命令行参数.

可以修改程序以支持命令行发送,而不是使用单独的脚本.在这种情况下你会做同样的基本事情.您的程序将查看它的命令行参数,如果适用,打开管道到程序的"main"实例,并发送参数.


Stu*_*Stu 5

如果它需要跨平台,您可能需要考虑使正在运行的实例侦听TCP端口,并让您从命令行启动的实例向该端口发送消息.


Ed *_* S. -2

所以,我可能没有抓住要点,但默认情况下,C 程序的 main 函数需要两个参数;argc,参数数量(至少一个)的计数,argv(或 arg 向量),参数列表。您只需解析参数并调用正确的方法即可。例如:

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

会将所有参数打印到屏幕上。我不是 C 大师,所以我希望我没有犯任何错误。

编辑:好吧,他在追求别的东西,但在编辑问题之前并不清楚。不必跳到我的代表...