gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 12:20:32 26 4
gpt4 key购买 nike

使用 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;
}

我不明白原因。

最佳答案

pugixml 1.0 期望输入流是可搜索的。 Seek 在流绑定(bind)到文件时有效,但在流绑定(bind)到管道时失败。

从 pugixml 1.2(昨天发布... :))开始,不可搜索的流被接受为 load() 源。您的示例在使用 1.2 编译时有效。

关于c++ - 在管道中调用时从 std::cin 加载 pugi::xml_document 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10419274/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com