在 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()
循环中,您会覆盖token
和params
,因此,token 将成为第一个参数而第二个参数。
【讨论】:
以上是关于在 strtok 之后将 arg 传递给 execl的主要内容,如果未能解决你的问题,请参考以下文章
我可以将长 bash 命令传递给 asyncio.subprocess.create_subprocess_exec() 吗?