将变量参数传递给新创建的进程

时间:2016-06-24 11:51:52

标签: c linux process

在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

如何实现这个目标?

1 个答案:

答案 0 :(得分:2)

非常有用的例子 https://support.sas.com/documentation/onlinedoc/sasc/doc/lr2/execv.htm

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>

main()
{
    pid_t pid;
    char *const parmList[] = {"/bin/ls", "-l", "/u/userid/dirname", NULL};

    if ((pid = fork()) == -1)
        perror("fork error");
    else if (pid == 0) {
        execv("/bin/ls", parmList);
        printf("Return not expected. Must be an execv error.n");
    }
}

正如您所见,execv()接受两个参数。第一个是可执行文件名。第二个是指向以空字符结尾的字符串的指针数组的指针,NULL指针用于标记数组的结尾。

创建新的char *数组,将proc1分配给第一个元素(索引0),并将所需参数分配给下一个元素。