在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
如何实现这个目标?
答案 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),并将所需参数分配给下一个元素。