У меня есть папка, отслеживаемая с помощью iNotify. Когда файл создается в папке, наблюдатель берет файл, переименовывает его (с помощью mv), а затем перемещает в другую папку. Затем вызывается программа RapidXML со сценарием bash, которая должна анализировать XML-содержимое файла. Программа iNotify также перезапускается после вызова скрипта программы RapidXML.
Итак, когда я запускаю программу RapidXML саму по себе, она анализирует файл и делает все, что должна. НО, когда я запускаю наблюдатель и файл XML помещается в каталог наблюдения, он обнаруживается, переименовывается, перемещается, но программа RapidXML зависает или вылетает (не уверен, какой именно) в момент
doc.parse<0>(&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.
Кто-нибудь знает, почему он не хочет анализировать файл XML при вызове скрипта?