如何在system()中使用通配符表达式

卡雷尔·范·韦兰特

以下命令在我的嵌入式Linux(Beaglebone Black)上运行良好:

echo bone_pwm_P9_21 > /sys/devices/bone_capemgr.?/slots

但是,在使用此小型C ++程序时不是:

#include <stdlib.h>
#include <string>

int main {
    system(std::string("echo bone_pwm_P9_21 > /sys/devices/bone_capemgr.?/slots").c_str());
    return 0;
}

问题涉及'?'用作通配符的问号。std::string传递给的中的问号system()被替换为正常字符时,该system()函数将完美地评估命令。

我尝试过的没有成功的解决方案:

  • 替换?\?
  • 替换?*
加利克

注意:正如πάνταῥεῖ所指出的那样,该system()命令调用shell,当提供正确的通配符时,通常将进行扩展:*如果您希望控件分别进行每个system()调用或基础外壳受到限制,则此答案更为合适

原始答案:

也许您可以调用之前使用wordexp来构造字符串system()

#include <string>
#include <vector>
#include <iostream>
#include <wordexp.h>

std::vector<std::string> expand_env(const std::string& var, int flags = 0)
{
    std::vector<std::string> vars;

    wordexp_t p;
    if(!wordexp(var.c_str(), &p, flags))
    {
        if(p.we_wordc)
            for(char** exp = p.we_wordv; *exp; ++exp)
                vars.push_back(exp[0]);
        wordfree(&p);
    }
    return vars;
}

int main()
{
    for(auto&& s: expand_env("$HOME/*")) // <= Note the wildcard '*'
        std::cout << s << '\n';
}

在您的特定情况下,您可能会使用以下内容:

int main()
{
    std::vector<std::string> devices = expand_env("/sys/devices/bone_capemgr.*/slots");

    for(std::vector<std::string>::size_type i = 0; i < devices.size(); ++i)
        system(("echo bone_pwm_P9_21 > " + devices[i]).c_str());
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在记事本中使用多个通配符reg表达式

来自分类Dev

Thymeleaf:如何在表达式中使用片段参数

来自分类Dev

如何在C ++模板中使用比较表达式?

来自分类Dev

如何在mysql sql中使用数学表达式?

来自分类Dev

如何在Realm中使用正则表达式

来自分类Dev

如何在Java的正则表达式中使用OR?

来自分类Dev

如何在Promise.all()中使用if表达式?

来自分类Dev

如何在angularjs中使用正则表达式

来自分类Dev

如何在jrxml文件中使用lambda表达式?

来自分类Dev

如何在正则表达式中使用Unicode

来自分类Dev

如何在SSRS表达式中使用If Else

来自分类Dev

如何在yii中使用正则表达式

来自分类Dev

如何在SMLNJ中使用正则表达式

来自分类Dev

如何在Django中使用表达式进行过滤

来自分类Dev

如何在表达式中使用Mysql SELECT CASE

来自分类Dev

如何在MVEL表达式中使用变量?

来自分类Dev

如何在EFCore中使用EF .SqlQuery表达式?

来自分类Dev

如何在表达式中使用委托

来自分类Dev

如何在熊猫中使用正则表达式?

来自分类Dev

如何在Isabelle / HOL中使用Lambda表达式?

来自分类Dev

如何在匹配的守卫表达式中使用TryParse?

来自分类Dev

如何在LXML XPath表达式中使用变量

来自分类Dev

如何在终端中使用算术表达式?

来自分类Dev

如何在linq lambda表达式中使用ToShortDateString?

来自分类Dev

如何在yii中使用正则表达式

来自分类Dev

如何在php中使用正则表达式?

来自分类Dev

如何在EL布尔表达式中使用II(或)

来自分类Dev

如何在正则表达式中使用加号

来自分类Dev

如何在SSRS表达式中使用If Else