使用 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);
}
我的可执行文件名为 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);
}