【发布时间】: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会是一个更好的选择。 -
是的,后来注意到了。我使用“”分隔符进行了修复,并为参数使用了一个指针数组而不是指针。它似乎工作
标签: c shell command exec strtok