我有一个 bash 命令
"cp -rf "TEMP_DIRECTORY"/* "USER_DIR"/";
我在 C 程序中使用它。
TEMP_DIRECTORY
和 USER_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_DIRECTORY
和USER_DIR
实际上包含您想要扩展的 shell 环境变量,最好您自己使用 getenv()
扩展它们。 ,形成完整路径,然后通过 fork()
调用命令随后是 exec()
之一变体。如果您需要 glob 扩展,可以使用 POSIX 实用程序 glob()
,或者您可以使用 <dirent.h>
中的函数自行遍历目录.
关于c - 在C程序中使用cp命令获取要复制的文件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50144558/