在管道中调用时,从std :: cin加载pugi :: xml_document失败

时间:2012-05-02 18:07:56

标签: c++ linux bash pugixml

使用pugixml 1.0

当我使用shell STDIN重定向时,从std :: cin加载XML文档时起作用:

$ ./pugitest < sample.xml # OK

但是当在管道中调用时,它会失败:

$ cat sample.xml | ./pugitest # FAILS
./pugitest: Error reading from file/stream

这是pugitest计划的代码:

#include "pugixml.hpp"

#include <iostream>
#include <stdexcept>

int main(int argc, char *const argv[])
{
    try {
        pugi::xml_document doc;
        pugi::xml_parse_result result = doc.load(std::cin);
        if (!result) {
            throw std::runtime_error(result.description());
        }
    } catch (std::exception& e) {
        std::cerr << argv[0] << ": " << e.what() << '\n';
        return 1;
    }

    return 0;
}

我不明白原因。

1 个答案:

答案 0 :(得分:2)

pugixml 1.0期望输入流是可搜索的。如果流绑定到文件,则Seek有效,但如果流绑定到管道,则无效。

从pugixml 1.2(已发布...昨天:)开始,不可搜索的流被接受为load()源。使用1.2编译时,您的示例可以正常工作。