【发布时间】:2016-06-24 11:51:51
【问题描述】:
在 Linux 中
我有 temp.c 文件。在那我创建了新进程,我需要将所有参数传递给该进程
int main (int argc, char *argv[])
{
if( (cid1 = fork()) == 0 ) //child1
{
res = execv(proc1, &argv[1]);
}
}
现在我编译它并运行为
./a.out "arg1 arg2 arg3"
现在我想将这个 arg1、arg2 和 arg3 传递给创建的新进程,但是当我检查 argc 时,它会显示 2 而不是 4
为什么会发生这种不匹配,在 proc1 中我只有 1 个参数,其值为 "arg1 arg2 arg3",但这里我想要 3 个参数,所以 argv[1] = arg1, argv[2]=arg2, argv[3]=arg3
如何做到这一点?
【问题讨论】:
-
听起来您可能错误地调用了第一个程序。您是否尝试在 first 程序中打印
argc?它应该是 4,但考虑到您所看到的,如果它只有 2,我不会感到惊讶。 -
好的,这正是我所期望的。您将单个参数传递给第一个程序,即
arg1 arg2 arg3。然后,您将相同的参数不变地传递给第二个程序。尝试从命令行中删除引号。这样它们将作为单独的参数传递。 -
Actulay 我需要必须使用双引号,因为在实际情况下,我有三个进程和 3 个由双引号分组的参数...
-
好的,在这种情况下,您必须自己在程序内部解析参数。您必须创建一个新的
argv,然后单独复制参数并将指针存储在新的argv中。