Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用脚本调用RapidXML时不进行分析_C++_Bash_Inotify_Rapidxml - Fatal编程技术网

C++ 使用脚本调用RapidXML时不进行分析

C++ 使用脚本调用RapidXML时不进行分析,c++,bash,inotify,rapidxml,C++,Bash,Inotify,Rapidxml,我有一个文件夹正在被iNotify监视。在文件夹中创建文件时,观察者会获取该文件,重命名它(使用mv),然后将其移动到另一个文件夹。然后用bash脚本调用RapidXML程序,并假设该程序解析文件的XML内容。在RapidXML程序脚本调用后,iNotify程序也会重新启动 因此,当我单独运行RapidXML程序时,它会解析文件并执行它应该执行的所有操作。但是,当我运行watcher并将一个XML文件放在watch目录中时,会检测到它,它会被重命名,它会被移动,但RapidXML程序会冻结或退出

我有一个文件夹正在被iNotify监视。在文件夹中创建文件时,观察者会获取该文件,重命名它(使用mv),然后将其移动到另一个文件夹。然后用bash脚本调用RapidXML程序,并假设该程序解析文件的XML内容。在RapidXML程序脚本调用后,iNotify程序也会重新启动

因此,当我单独运行RapidXML程序时,它会解析文件并执行它应该执行的所有操作。但是,当我运行watcher并将一个XML文件放在watch目录中时,会检测到它,它会被重命名,它会被移动,但RapidXML程序会冻结或退出(不确定是哪一个)

doc.parse(&buffer[0]);
线路

以下是RapidXML程序的代码部分:

#include "xmlparser.h"

using namespace std;
using namespace rapidxml;

int main(int argc, char * argv[])
{
    //variable declaration left out for space purposes


xml_document<> doc;
xml_node<> * root_node;

ifstream theFile("config.xml");
vector<char> buffer((istreambuf_iterator<char>(theFile)), istreambuf_iterator<char>());
buffer.push_back('\0');

doc.parse<0>(&buffer[0]);
// find the root node
root_node = doc.first_node("configuration");
// iterate over the deltas
xml_node<> * deltas_node = root_node->first_node("deltas");

svn = boost::lexical_cast<double>(deltas_node->first_attribute("svn")->value());
svd = boost::lexical_cast<double>(deltas_node->first_attribute("svd")->value());
    ... //other variable assignments

xml_node<> * report_node = deltas_node->next_sibling("report");

optime = boost::lexical_cast<int>(report_node->first_attribute("optime")->value());
opstatusa = boost::lexical_cast<int>(report_node->first_attribute("opstatusa")->value());
... // other variable assignments

xml_node<> * timing_node = report_node->next_sibling("timing");

timing = boost::lexical_cast<int>(timing_node->first_attribute("timing"));

... // then I do some SQL stuff with the mysql cpp connector.
#包括“xmlparser.h”
使用名称空间std;
使用名称空间rapidxml;
int main(int argc,char*argv[])
{
//为节省空间而省略的变量声明
xml_文档文档;
xml_节点*根节点;
ifstream文件(“config.xml”);
向量缓冲区((istreambuf_迭代器(theFile)),istreambuf_迭代器();
buffer.push_back('\0');
文档解析(&buffer[0]);
//找到根节点
根节点=文档第一个节点(“配置”);
//在三角洲上迭代
xml_节点*增量节点=根节点->第一个节点(“增量”);
svn=boost::词法转换(增量节点->第一个属性(“svn”)->值();
svd=boost::词法转换(增量节点->第一个属性(“svd”)->值();
…//其他变量赋值
xml_节点*报告_节点=增量_节点->下一个兄弟节点(“报告”);
optime=boost::词法转换(report\u node->first\u属性(“optime”)->value();
opstatusa=boost::词法转换(报告节点->第一个属性(“opstatusa”)->value();
…//其他变量赋值
xml_节点*计时_节点=报告_节点->下一个兄弟节点(“计时”);
timing=boost::词法转换(timing\u节点->第一个\u属性(“timing”);
…//然后我使用mysql cpp连接器执行一些SQL操作。

有人知道为什么用脚本调用时它不想解析XML文件吗?

似乎如果要使用doc.parse命令,必须指定文件的完整路径名,因此在我的情况下:

ifstream theFile("/home/root/xmlparser/config.xml");

似乎如果要使用doc.parse命令,必须指定文件的完整路径名,因此在我的示例中:

ifstream theFile("/home/root/xmlparser/config.xml");

我注意到rapidxml在使用脚本调用时会出现分段错误,但在从终端调用时不会出现分段错误!Whyyyy?我注意到rapidxml在使用脚本调用时会出现分段错误,但在从终端调用时不会出现分段错误!Whyyyy?