Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在strtok之后将arg传递给execl_C_Shell_Command_Exec_Strtok - Fatal编程技术网

在strtok之后将arg传递给execl

在strtok之后将arg传递给execl,c,shell,command,exec,strtok,C,Shell,Command,Exec,Strtok,我必须将这一系列命令传递给一个进程,strtok它们并使用exec执行 这些命令是: mkdir prova rm prova/test touch prova/test ls cp prova/test prova/test2 到目前为止,我所做的是: char *token, *cmd, *params, path[30] = "/bin/"; token = strtok(m_cmd.cmd, " "); cmd = token; while(tok

我必须将这一系列命令传递给一个进程,
strtok
它们并使用
exec
执行

这些命令是:

mkdir prova
rm prova/test
touch prova/test
ls
cp prova/test prova/test2
到目前为止,我所做的是:

    char *token, *cmd, *params, path[30] = "/bin/";

    token = strtok(m_cmd.cmd, " ");

    cmd = token;

    while(token != NULL){
        //printf("[server] Token: %s ", token);
        params = token;
        token = strtok(NULL, "");
    }
    /* other code */
    execl(path, cmd, params, (char*)(0));
我的问题有两个:

1) 当我得到
ls
时,如何在没有参数的情况下执行
execl

2) 当我尝试执行
cp prova/test prova/test2
时,它将
prova/test prova/test2
作为一个参数,而不是两个参数

我做错了什么?

1)根据手册页
exec(3)
第一个参数无论如何都应该是命令名(argv[0]),而不是第一个参数(argv[1])


2) 是的,很明显。在
while()
循环中,您覆盖
token
params
,因此,token将成为第一个参数,params将成为第二个参数。

首先,您需要找到一种跟踪参数的方法(“params”在您调用它们时),如果没有参数,则不应将任何参数传递给函数。其次,看看第二次调用strtok,这真的是你想要的分隔符吗?第三,我认为如果你有未知数量的参数,
execv
将是一个更好的选择。是的,我后来注意到了这一点。我使用“”分隔符进行了修复,并使用了参数的指针数组而不是指针。它似乎起作用了