在C程序中使用cp命令获取要复制的文件列表

时间:2018-05-02 22:39:33

标签: c bash

我有一个bash命令

"cp -rf "TEMP_DIRECTORY"/* "USER_DIR"/";

我在C程序中使用它。

TEMP_DIRECTORYUSER_DIR是使用#define定义的。

我想获取TEMP_DIRECTORY内的文件列表。我可以用上述方法做到吗?

1 个答案:

答案 0 :(得分:0)

如果我们将提供的代码行视为您打算用来执行所需任务的实际代码片段,则查询的答案为 no

假设:

#define TEMP_DIRECTORY "/tmp"
#define USER_DIR "/home/joe"

然后,提供的语句只是表示字符串常量的表达式,并且它本身不执行任何操作。 GCC有足够的警告会告诉你:

.code.tio.c: In function ‘main’:
.code.tio.c:5:1: warning: statement with no effect [-Wunused-value]
 "cp -rf "TEMP_DIRECTORY"/* "USER_DIR"/";
 ^~~~~~~~~

要使命令在C代码中生效,您需要将字符串传递给函数,例如system()popen()

const char *cmd = "cp -rf "TEMP_DIRECTORY"/* "USER_DIR"/";
system(cmd);

但是,由于system()popen()使用shell来执行命令,因此它们容易受到命令注入攻击。如果您的TEMP_DIRECTORYUSER_DIR实际上包含要扩展的shell环境变量,最好使用getenv()自行展开它们,形成完整路径,然后通过{调用命令{1}}之后是fork()个变体之一。如果您需要glob扩展,那么可以使用POSIX实用程序exec(),或者您可以使用glob()中的函数自行遍历目录。