使用execl复制调用可执行文件时提供的两个文件

时间:2016-01-31 17:41:56

标签: c process operating-system command exec

我的可执行文件名为 hfile = HttpOpenRequest(hLastConnection, 'GET', '/path', NULL, NULL, NULL, INTERNET_FLAG_RELOAD | INTERNET_FLAG_KEEP_CONNECTION, 0); HttpAddRequestHeaders(hfile,'Accept: foobar', 14, HTTP_ADDREQ_FLAG_REPLACE or HTTP_ADDREQ_FLAG_ADD);

执行时我想要

copy

基本上做

copy file1 file2

我希望使用cp -i -p file1 file2 函数来完成此任务。

现在我对execl有了更多的专业知识,可以自动搜索命令的路径。

所以我可以做以下事情:

execvp

但是,我怎样才能使用char *cmd[] = {"cp","-ip",0} execvp(cmd[0],cmd); 来指定execvp哪个是file1而argv[1]是file2

1 个答案:

答案 0 :(得分:1)

这是execl函数的原型:

int execl(const char *path, const char *arg, ...
                       /* (char  *) NULL */);

因此它接受二进制路径的参数,然后是参数。 您要使用的二进制文件是cp,因此,路径将是/ bin / cp(您可以使用 whereis cp 来查找二进制位置)。

然后你必须传递cp所需的参数。 像这样的例子:

int main(int argc, char **argv)
{
  execl("/bin/cp", "-i", "-p", argv[1], argv[2], (char *)0);
}

要获得cp交互式提示,您必须从shell调用cp。要模拟这个,你可以用sh调用你的命令。您可以直接使用system函数,或使用execl系列中的函数。

int main(int argc, char **argv)
{
  char *cmd;
  if (asprintf(&cmd, "cp -ip %s %s", argv[1], argv[2]) == -1)
    return (1);
  execlp("sh", "sh", "-c" , cmd, (char *)0);
}