【问题标题】:Ultra-portable, small complex config file library in ANSI C?ANSI C 中的超便携、小型复杂配置文件库?
【发布时间】:2011-04-02 18:50:05
【问题描述】:

我正在寻找一个非常便携、简约/小型的 ANSI C 中的 XML/配置语言库,没有外部依赖项(或很少),编译到小于 100K。我需要它用于中等复杂的配置文件,并且它必须支持 Unicode。

更多要求:

  1. 可以使用/嵌入/静态链接到专有代码。信用到期时将始终给予信用。
  2. 不一定是 XML。
  3. 真的,代码干净/没有奇怪或不一致的字符串处理。
  4. UTF-8

谢谢各位。

【问题讨论】:

  • 我希望能够定义类型,例如。主机名列表及其信息。这适用于使用内部协议的小型代理应用程序。
  • 对,不需要模式解析器,我正在检查库。有机会知道什么是最小的吗?
  • 我不确定是否应该针对更通用的非 XML 语言提交问题。我正在查看 libconfig,但它不太支持 UTF8,这是个问题。
  • 更新:没有 json 库真的为我做了。 :(

标签: c xml embedded configuration-files


【解决方案1】:

这有点类似于这个问题:Is there a good tiny XML parser for an embedded C project?

我能够为 C 调整以下 XML 解析器库的编译标志,并在我的 Ubuntu 机器上减少了 50% 以上的大小。 Mini-XML 是唯一接近您要求的:

【讨论】:

    【解决方案2】:

    对于这种用例,IMO 协议缓冲区是比 XML 更好的解决方案。使用协议缓冲区,您可以获得真正的类型和模式,而无需将它们分层到基础 XML 之上。语法也更好。

    // The schema file: can serve as documentation for what
    // configuration values are available.
    message MyAppConfig {
      // Set to control the port the app listens on.
      optional int32 port = 1 [default=1234];
    
      // Set to control the local hostname.
      optional string hostname = 2 [default="localhost"];
    }
    

    那么用户的实际配置将如下所示:

    # I want to listen on a very high port.
    port: 50000
    

    主协议缓冲区库不符合您的标准,因为它使用 C++ 编写并且非常大。我正在研究一个更小的实现,称为upb(即“微”protobufs)。它是用大约 5k 行的 ANSI C 编写的,编译为

    协议缓冲区具有二进制和文本格式,它们是等效的。我的库(尚)不支持读取文本格式,但您可以让您的用户使用 Google 标准工具提前将其配置的文本版本转换为二进制格式。那么你的应用本身只需要读取二进制格式,就可以使用 upb 了。

    upb 刚刚达到冒险用户可以尝试的地步,但它的边缘仍然有些粗糙,API 仍在发生一些变化。如果你对此没问题,你现在可以尝试潜水。如果您更喜欢更稳定的东西,请至少保持警惕。

    【讨论】:

    • 现在去看看,看起来不错。我希望静态库最大在 50K 以内。
    猜你喜欢
    • 1970-01-01
    • 2011-01-26
    • 2013-01-09
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多