C++ 用于在c++;,linux下

C++ 用于在c++;,linux下,c++,linux,system,C++,Linux,System,我想使用system()执行命令。该命令需要一个文件名作为参数。大概是这样的: void f(string filename){ strnig cmd = "path/to/my/command " + filename; system(cmd.c_str()); ... } 我的问题是,我可以使用什么转义序列,以便在filename中接收的字符串仅被视为文件名,而不考虑其他内容。例如,如果filename=“aname;rm*”,我不希望在“aname”上执行命令,然后将“r

我想使用
system()
执行命令。该命令需要一个文件名作为参数。大概是这样的:

void f(string filename){
  strnig cmd = "path/to/my/command " + filename; 
  system(cmd.c_str());
  ... 
}
我的问题是,我可以使用什么转义序列,以便在filename中接收的字符串仅被视为文件名,而不考虑其他内容。例如,如果
filename=“aname;rm*”
,我不希望在
“aname”
上执行命令,然后将
“rm*”
视为一个新命令,并从当前目录中删除所有内容

此外,我希望我的文件名能够包含特殊字符,如:
或空格,而不影响命令的执行

如何在C++中实现这一点?< /P> 谢谢!

人工智能系统:

system()通过调用/bin/sh-c命令执行命令中指定的命令


使用你的shell荣誉的转义序列。< /P>我的问题是如何在C++中应用转义序列?有没有其他解决方案来做这件事,而不是解析文件名,然后检查每个字符,看看它是不是特殊字符,然后用“\”前缀。”“啊,我明白了。恐怕你运气不好,手工解决是唯一的办法。也就是说,如果您坚持使用

系统
,则极不鼓励使用该系统,部分原因正是如此。一个>代码>叉/执行器< />代码>习惯用法。您可以考虑使用诸如<代码> ExcVE()/<代码>而不是<代码>系统()/<代码>。它的使用更为复杂(但这种复杂性可以隐藏在函数中),您不会得到通配符扩展,但也不会得到您不想要的shell行为。如果您不想要或不需要通配符,我认为
execv()
将是最好的选择。