如何复制具有完整路径的文件并使用 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
,但如果您不知道它的可靠性和安全性,则很难使其可靠且安全确保文件名验证某些约束。
如果您只想重命名文件,最好使用标准函数rename
from stdio.h
。如果没有,请澄清您的问题。
答案2
这听起来像是一项家庭作业,所以我故意含糊其辞。
听起来要求是在使用输出重定向运算符时模仿 shell 的行为。您需要在调用之前操作标准文件描述符execl()
,以便调用进程的标准输出是目标输出文件的打开文件描述符。这样,当 cat 写入标准输出时,内容将转到目标文件。