我有一个bash命令
"cp -rf "TEMP_DIRECTORY"/* "USER_DIR"/";
我在C程序中使用它。
TEMP_DIRECTORY
和USER_DIR
是使用#define
定义的。
我想获取TEMP_DIRECTORY
内的文件列表。我可以用上述方法做到吗?
答案 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_DIRECTORY
和USER_DIR
实际上包含要扩展的shell环境变量,最好使用getenv()
自行展开它们,形成完整路径,然后通过{调用命令{1}}之后是fork()
个变体之一。如果您需要glob扩展,那么可以使用POSIX实用程序exec()
,或者您可以使用glob()
中的函数自行遍历目录。