fork()和exec():带空格的参数

时间:2018-02-08 11:41:25

标签: c escaping exec

我想在c中分叉并执行二进制文件。调用二进制文件的参数包含一个空格,请参见示例代码的第一行。如果用`plist [2] = conPtr - >执行我的二进制文件conmon_cmd [f];`参数未正确计算。

使用两个注释行将为我带来我想要的结果。如何在代码片段的第一行中转义空格,以便我只有一个 plist参数用于参数?

conPtr->conmon_cmd = "clear_config all";
[...]
printf("child process started (PID = %i)\n", pid);  
char *plist[6];
plist [0] = "/tmp/conmon_audinate_controller";
plist [1] = "localhost";
plist [2] = conPtr -> conmon_cmd;
//plist [2] = "clear_config";
//plist [3] = "all";
plist [4] = (char *)NULL;
char *file = "conmon_audinate_controller";
execvp (file,  plist );                        

信息:conmon_audinate_controller是一个外部可执行文件。在我的ucLinux上的bash中,调用将是: /tmp # ./conmon_audinate_controller localhost clear_config all

1 个答案:

答案 0 :(得分:2)

如果我理解正确,你有一个C字符串(带有两个单词),你希望将它作为两个参数传递给conmon_audinate_controller

exec家庭功能不支持此类事情 - " clear_config all"将作为单个参数传递。您可以做的是将conPtr->conmon_cmdusing strtok for example拆分为两个并传递两个参数(如注释掉的行)。