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

标签 c bash

我有一个 bash 命令

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

我在 C 程序中使用它。

TEMP_DIRECTORYUSER_DIR 使用 #define 定义。

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

最佳答案

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

假设:

#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执行命令,容易受到命令注入(inject)攻击。如果您TEMP_DIRECTORYUSER_DIR实际上包含您想要扩展的 shell 环境变量,最好您自己使用 getenv() 扩展它们。 ,形成完整路径,然后通过 fork() 调用命令随后是 exec() 之一变体。如果您需要 glob 扩展,可以使用 POSIX 实用程序 glob() ,或者您可以使用 <dirent.h> 中的函数自行遍历目录.

关于c - 在C程序中使用cp命令获取要复制的文件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50144558/

相关文章:

c - 模数 "%"和按位和 "&"的剩余部分计算导致 AVX2 上的结果不同

c - 我收到错误 undefined symbol : __const_udelay?

c - 存储树的遍历

linux - 如何通过 api 在容器内执行命令

bash - entrypoint.sh-第9行:语法错误:意外的 “(”

c - 如何将信号 NaN 转换为安静 NaN?

c - 我无法用c语言读取另一个结构

bash - 将具有特定名称的目录递归复制到维护结构的新位置

bash - "find ... {} + || true"是做什么的?

linux - 在 bash 中将条目添加到数组