在 strtok 之后将 arg 传递给 execl

Posted

技术标签:

【中文标题】在 strtok 之后将 arg 传递给 execl【英文标题】:Pass arg to execl after strtok 【发布时间】:2016-04-30 19:06:36 【问题描述】:

我必须将这一系列命令传递给一个进程,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 作为一个参数而不是两个。

我做错了什么?

【问题讨论】:

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

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

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

【讨论】:

以上是关于在 strtok 之后将 arg 传递给 execl的主要内容,如果未能解决你的问题,请参考以下文章

find与xargs配合使用

将文件内容传递给 docker exec

linux常用命令(19)find xargs

我可以将长 bash 命令传递给 asyncio.subprocess.create_subprocess_exec() 吗?

我在使用strtok时收到了一个分段故障核心

传递给`instance_exec`时如何执行proc