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

Using execl to copy two files provided when calling the executable

我的可执行文件名为 copy.

我要执行的时候

copy file1 file2

基本做到

cp -i -p file1 file2

我想使用 execl 函数来完成此操作。

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

因此我可以执行以下操作:

char *cmd[] = {"cp","-ip",0}
execvp(cmd[0],cmd);

但是我什至如何使用 execvp 来指定文件 1 的 argv[1] 和文件 2

argv[2]

这里是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);
}