`
happmaoo
  • 浏览: 4504362 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

TinyXml的读取和编辑以及多线程的锁

阅读更多

#include <iostream>

#include <pthread.h>

#include <string.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <dirent.h>

#include <errno.h>

#include <vector>

#include <algorithm>

#include <unistd.h>

#include "tinyxml/tinyxml.h" //本地下载了tinyxml源码

#include <stdexcept>

#include <map>

#include <fcntl.h>

#include <stdlib.h>

#define MACXML "mac.xml"

using namespace std;

static bool usingMacXml = false;

pthread_mutex_t mutexMac = PTHREAD_MUTEX_INITIALIZER;

struct mac_data{

string mac;

string account;

string password;

string status;

};

void setMacStatus(mac_data m,string status)

{

pthread_mutex_lock( &mutexMac );

while(true)

{

if(!usingMacXml)

{

usingMacXml = true;

TiXmlDocument* macXml = new TiXmlDocument();

while(!(macXml->LoadFile(MACXML)))

{

}

TiXmlElement* rootElement = macXml->RootElement(); //MacList

TiXmlElement* macElement = rootElement->FirstChildElement(); //Machine

while ( macElement ) {

TiXmlElement* nameElement = macElement->FirstChildElement();//获得Machine的Name元素

TiXmlElement* accountElement = nameElement->NextSiblingElement(); //获得Machine的Password元素

TiXmlElement* passwordElement = accountElement->NextSiblingElement(); //获得Machine的Account元素

TiXmlElement* statusElement = passwordElement->NextSiblingElement(); //获得Machine的Status元素

bool condition = m.mac ==nameElement->GetText() && m.account ==accountElement->GetText() && status !=statusElement->GetText();

if(condition)

{

statusElement->Clear();

TiXmlText * text = new TiXmlText(status );

statusElement->LinkEndChild( text );

break;

}

else

cout<<"No match "<<m.mac<<" "<<nameElement->GetText()<< " account:"<<m.account<<" "<<accountElement->GetText()<<" status:" <<m.status<<" " <<statusElement->GetText()<<endl;

cout<<"condition is "<<condition<<endl;

macElement = macElement->NextSiblingElement();

}

macXml->SaveFile(MACXML);

delete macXml;

usingMacXml = false;

break;

}

else

system("sleep 1");

}

pthread_mutex_unlock(&mutexMac);

}

分享到:
评论

相关推荐

    C++ XML 解析之 TinyXML

    在多线程环境中使用 TinyXML,需要注意设置多线程运行时库。在 Visual Studio 中,这可以通过在 C/C++ 代码生成选项中选择 "Debug MultiThreaded DLL" 或 "Release MultiThreaded DLL" 来实现。这是因为 TinyXML ...

    tinyXml2源码

    TinyXML2本身并不提供线程安全的保证,因此在多线程环境中使用时,需要开发者自己处理同步问题。 9. **C++11支持**: TinyXML2可能支持C++11特性,例如右值引用和智能指针,这使得库的使用更加现代化,降低了内存...

    tinyxml2:TinyXML2是一个简单,小型,高效的C ++ XML解析器,可以轻松集成到其他程序中

    简而言之,TinyXML-2解析XML文档,并以此为基础构建可读取,修改和保存的文档对象模型(DOM)。 XML代表“可扩展标记语言”。 描述任意数据是一种通用的人类和机器可读标记语言。 为存储应用程序数据而创建的所有...

    cocos2d-x 读取本地的xml文件

    请注意,读取XML文件可能会涉及到线程安全问题,如果在多线程环境下,需要确保文件操作是在合适的安全上下文中完成的。 在HTMLTest这个示例中,可能包含了一个使用HTML来展示图文混排效果的测试。HTML在游戏开发中...

    xml学习方法与应用

    本文主要探讨XML的学习方法与应用,重点介绍TinyXml库的特性和使用。 TinyXml是一个轻量级的C++库,采用DOM(Document Object Model)模型解析XML文档。DOM模型将XML文档解析为一棵树形结构,每个节点代表XML文档的...

    解析xml的方法

    本文将详细介绍两种流行的C++ XML解析库:TinyXML和Xerces-C++,并深入探讨它们的特点、使用场景以及如何进行高效解析。 ### 一、TinyXML:轻量级的C++ XML解析器 TinyXML是一个开源、轻量级的C++ XML解析库,特别...

    跨平台解析XML文件

    TinyXML是一个轻量级的开源库,它允许C++开发者在程序中读取、修改和写入XML文件。TinyXML库的特性包括小巧、易于使用和无需外部依赖,这使得它成为许多开发者首选的XML解析解决方案。首先,我们需要了解TinyXML的...

    vc++ xml操作大全

    同时,注意内存管理和线程安全,尤其是在多线程环境下操作XML。 7. **示例代码** 以下是一个简单的使用MSXML读取XML文件的示例: ```cpp #import &lt;msxml3.dll&gt; raw_interfaces_only using namespace msxml; ...

    pugixml-1.6

    与其他XML库如TinyXML、Xerces-C++相比,Pugixml在性能和易用性上表现出色。然而,对于需要全面的XPath支持或者SAX解析的场景,Pugixml可能不是最佳选择,因为这些特性在Pugixml中并未实现。 总结来说,Pugixml是...

    CSDN资源_Ftp工具源码+xml解析源码(vc6.0)

    4. **线程管理**:多线程处理用户交互和文件传输,以保持界面响应。 5. **错误处理**:处理网络异常、超时和FTP服务器返回的错误代码。 **XML解析源码**: XML(eXtensible Markup Language)是一种用于存储和传输...

    INI文件读写类

    它以键值对的形式组织数据,易于理解和编辑。"INI文件读写类"是为了方便开发者在编程过程中高效地读取和写入这些文件而设计的。这类类库通常包含一系列的方法和函数,使得操作INI文件变得更加便捷。 在C++编程中,...

    C++解析xml源码

    XML解析库在C++中有很多选择,如TinyXML、pugixml、Xerces-C++等。这些库提供了方便的API,帮助开发者高效地解析XML。如果"Markup.cpp"和"Markup.h"是自定义实现,那么它们可能使用了类似这些库的机制,但可能进行了...

    工业级XML处理类

    在C++中处理XML,常见的库有TinyXML、pugixml、Xerces-C++等。如果这里的“工业级XML处理类”是一个自定义实现,它可能包含以下关键知识点: 1. **XML解析**:将XML字符串或文件转化为内存中的数据结构,如DOM...

    Vc++ 解析Xml(用于Landsat元数据)

    在C++中,可以使用TinyXML或pugixml等库实现SAX解析。对于Landsat元数据,我们需要关注的事件可能包括元数据的开始和结束标签,以及关键属性的值。 另外,考虑到C++的标准库,可以利用`std::ifstream`类来读取文件...

    mobile下XML文件解析

    7. **线程安全**:如果XML解析是在多线程环境中进行,需要确保解析器和相关资源是线程安全的,以防止竞态条件和数据损坏。 8. **XML与数据库集成**:在移动设备上,XML有时被用作与嵌入式数据库(如SQLite)交互的...

    VC读取动态配置文件

    在实际应用中,还可以考虑增加错误处理、文件是否存在判断、多线程安全等特性,以增强代码的健壮性和适用性。同时,对于更复杂的配置文件格式,如XML或JSON,可以使用库如TinyXML或pugixml解析XML,nlohmann/json...

    xml操作类

    2. **DOM(Document Object Model)解析**:在C++中,常用MSXML或TinyXML库来解析XML,通过DOM模型将整个XML文件加载到内存中,形成一个树形结构。`XmlNodeWrapper` 类可能包含解析XML文件到DOM树的方法,并提供遍历...

    xml解析器6666

    8. **XML标准库**:可能会使用如TinyXML、pugixml等开源XML库作为基础,进行二次开发以提高效率。 为了进一步了解"xml解析器6666"的具体实现和优化策略,需要深入阅读源代码,分析其实现细节。同时,可以通过性能...

    qt公司人员管理系统

    5. 配置管理:通过TinyXML读取和写入配置文件,如系统设置、数据库连接信息等。 在实际开发过程中,开发者需要关注以下几点: - 跨平台兼容性:Qt的跨平台特性使得系统能够在多种操作系统上运行,需要确保在不同...

Global site tag (gtag.js) - Google Analytics