在 execl() 函数中使用 cat 复制文件

在 execl() 函数中使用 cat 复制文件

如何复制具有完整路径的文件并使用 execl 在 C 程序中重命名它?我可以使用这个指令吗:

execl("/bin/cat","cat",path_source,">",path_destination,NULL);

答案1

您发布的代码看起来旨在模仿以下 shell 命令:

cat path_source >path_destination

但是,在这种情况下,>不是cat;的参数。相反,它由您的 shell 解释,该 shell 将cat使用单个参数运行path_source,其标准输出连接到 path_destination。 (所以你的 C 代码确实如此 cat path_source '>' path_destination。)

模仿cat上述命令的一种方法是构造一个包含 shell 命令 ( "cat ... >...") 的字符串,然后使用 exec 将其作为参数传递给/bin/sh -c,但如果您不知道它的可靠性和安全性,则很难使其可靠且安全确保文件名验证某些约束。

如果您只想重命名文件,最好使用标准函数renamefrom stdio.h。如果没有,请澄清您的问题。

答案2

这听起来像是一项家庭作业,所以我故意含糊其辞。

听起来要求是在使用输出重定向运算符时模仿 shell 的行为。您需要在调用之前操作标准文件描述符execl(),以便调用进程的标准输出是目标输出文件的打开文件描述符。这样,当 cat 写入标准输出时,内容将转到目标文件。

相关内容