从C内部运行csh
|
我想从我的C程序中运行“ 0”命令。我使用以下代码进行了此操作:
char *csh_command[3];
...
csh_command[2]=(char*)malloc((length_command+strlen(\"\\\"\\\"\"))*sizeof(char));
csh_command[0]=(char*)malloc((strlen(\"-f\")+1)*sizeof(char));
csh_command[1]=(char*)malloc((strlen(\"-c\")+1)*sizeof(char));
strcat (csh_command[0],\"-f\");
strcat (csh_command[1],\"-c\");
strcat (csh_command[2],\"\\\"\");
strcat (csh_command[2],full_command);
strcat (csh_command[2],\"\\\"\");
pid=fork();
if (pid == 0){
execvp(\"csh\", csh_command);
}
我在这里所做的是创建一个包含csh
参数的数组:
-f,-c,\“ [要运行的命令] \”
但是结果不是预期的。子进程只是在后台运行而无所事事。
我们尝试使用它运行ls | wc -l
。
问题出在哪里?
编辑:
length_command
变量对于\\0
已经具有+1。问题在于数组未以ѭ6终止。 \"
是不必要的。
没有找到相关结果
已邀请:
3 个回复
焙恍挝厂熄
的价值是多少?至少应该是
更新: 另一个问题可能与ѭ11有关,因为您使用的是未初始化的字符串,并且它们可能包含一些垃圾。至少执行以下操作:
或者只使用
而不是
+
臂哦
+
=
除非您打算使用通用的
函数或其他功能,否则为什么要复制字符串文字而不是直接使用它们呢?
参数数组必须以
结尾。 在这种情况下,数组初始值设定项和匿名数组会很幸运-您可能不会错过最后的NULL。当然,除非您必须使用完全动态的结构... 您不应在命令参数中使用那些多余的双引号。当您使用命令行时,这些命令将用于运行中的shell,并在调用
时将其删除。换句话说,“ 0”应表示“ 24”,而不是“ 25”。 哦,
中参数数组的第一个元素始终是
。那可能应该是沿着“ 0”线的东西,而不是一种选择。 编辑: 还有一件事:在使用
之前,您是否清除了
分配的内存?
会很高兴地溢出缓冲区,具体取决于缓冲区中已有的随机内容...
粱委教
第二个问题是
: 指针数组必须以NULL指针终止。 另外,ѭ20使用外壳程序并在路径中搜索给定命令。当前具有
的第一个参数是要运行的可执行文件。您说的是要run36。那将是第一个论点。