在strtok之后传递arg到execl

时间:2016-01-24 13:15:17

标签: 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(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 个答案:

答案 0 :(得分:0)

1)根据手册页app.php,第一个参数应该是命令的名称(argv [0]),而不是第一个参数(argv [1])。

2)是的,显然。在exec(3)循环中,您覆盖while()token,因此,令牌将成为第一个参数并且第二个参数。