在Firebreath中使用个人程序

时间:2012-03-25 05:02:29

标签: c++ firebreath

我正在使用Firebreath构建一个插件。我在ABCPluginAPI.cpp中创建了一个名为exe_program()的个人方法,我想使用名为my_program的popen调用另一个程序。所有文件都进入firebreath / projects / ABCPlugin /.

我的方法是:

string ABCPluginAPI::exe_program()
{
    FILE * pPipe;
    fd_set readfd;
    char buff[1024];
    char command[128];
    int ret;

    strcpy(command, "my_program");

    if (!(pPipe = popen(command, "r"))) {
         // Problem to execute the command
       return "failed";
    }
    while(fgets(buff, sizeof(buff), pPipe)!=NULL){
        cout << buff;
        return buff;
    }
}

我遇到的问题是插件没有运行my_program,实际上如果我执行pwd命令,它会显示我的$ HOME目录。 pwd有效,因为它是一般命令,但我不想把我的程序放到$ PATH变量中,因为这个插件必须是可移植的。

可能Firebreath使用特殊目录来引用此类文件或类似内容。

1 个答案:

答案 0 :(得分:1)

您可能需要指定要运行的应用程序的完整路径和文件名;当前的工作目录不保证始终是相同的值。

在firebreath.org的Tips and Tricks页面上,您可以添加到PluginCore派生对象的代码,它将为您提供插件文件的完整路径和文件名:

// From inside your Plugin class (that extends PluginCore)
std::string MyPlugin::getFilesystemPath()
{
    return m_filesystemPath;
}

您可以采取该路径,剥离最后一部分,并将其更改为可执行文件名;只要将可执行文件放在与插件相同的目录中就可以正常工作。或者,您可以将其安装在其他一些着名的位置。

请注意,要从JSAPI对象调用主Plugin对象上的方法,JSAPI对象上应该有一个帮助方法getPlugin()(如果使用fbgen生成它):

std::string pluginPath = getPlugin()->getFilesystemPath();

希望有所帮助