是否有广泛使用的C库用于从文件中读取名称/值对?

是否有广泛使用的C库用于从文件中读取名称/值对?,c,linux,file-io,settings,C,Linux,File Io,Settings,我的程序正在读取一个文本文件,其中包含设置文件的多行文本。有些线路可能变得非常大。当前缓冲区大小为4096个字符。有些行可能会超出此范围,无论是由于恶意还是由于程序中的各种因素 当前的例程编写起来相当枯燥,现在我想扩展文件的可能内容,这将需要更多这种枯燥重复的代码。(这适用于设置类型文件,由名称-值对和偶尔的节头组成。由于多精度,某些数值需要作为字符串读取) 我想做的主要事情是在没有缓冲区溢出的情况下读取任意长度的行。我刚刚发现getline可以为我做这件事,但是,看在上帝的份上,有没有一个库可

我的程序正在读取一个文本文件,其中包含设置文件的多行文本。有些线路可能变得非常大。当前缓冲区大小为4096个字符。有些行可能会超出此范围,无论是由于恶意还是由于程序中的各种因素

当前的例程编写起来相当枯燥,现在我想扩展文件的可能内容,这将需要更多这种枯燥重复的代码。(这适用于设置类型文件,由
名称-值
对和偶尔的节头组成。由于多精度,某些数值需要作为字符串读取)

我想做的主要事情是在没有缓冲区溢出的情况下读取任意长度的行。我刚刚发现getline可以为我做这件事,但是,看在上帝的份上,有没有一个库可以为我做所有这些繁琐的事情呢

编辑:

我不希望被迫在名称和值之间放置一个
=
符号,一个空格应该足以作为分隔符

我所说的广泛使用,是指该库应该在流行的Linux发行版的标准包中提供

我知道,但对于我的要求来说,这似乎完全是过火了。

仔细看看,听起来不错。它已经很老了,并没有经历过疯狂的开发,但如果它已经解决了你的问题,那应该没问题


一个更现代化的图书馆,还有一系列其他的好处,就是它有一个独立的图书馆。

我的建议是,DIY,因为它很简单

  • 读每一行

  • 在分隔符之前和分隔符之后计算字符数

  • 分配缓冲区

  • 并使用sscanf读取名称-值对

    比如:

    sscanf(行“%[^:::%[^\n]”,键,值)

您将是安全的,因为您在
sccanf

我为您提供at之前已清点了chars。它还包含一个非常有用的字典实现以及一些简单的哈希算法。Rusty把它放在回购协议中,所以我想我在更新和修复少数小错误方面做得相当不错

如果您需要,可以找到该库的最新版本,它包含基本令牌支持和基本事务支持(用于重新读取配置文件和在出现解析错误时还原)。它还包含一组更新得多的单元测试


我不再主动维护fork,因为libini的原始作者再次激活了它,但是该模块是在CCAN中维护的。

在这种情况下,我也建议编写它,它似乎很琐碎。唯一的问题是你将如何存储你的表,如果这是纯C,那么你就没有std::map了,但我想你已经有了自己的数据结构了?感谢sscanf%[..]提示,但是在测试之后,你缺少了一个插入符号:
“%[^:::::%[^\n]”
,干杯,我要走这条路了。更正。很抱歉遗漏了插入符号。我已经决定不使用油嘴滑舌的选项,因为这对我的要求来说又是一种过分的要求。选择正确的答案,虽然不能直接解决库中的问题,但使我更容易继续,并且不会破坏现有数据文件中使用的任何现有文件规范。@James:我想这很好。。。尽管我倾向于认为,对于任何非平凡的C程序来说,glib都是一种健康的依赖,因为它添加了很多在此类程序中经常需要的东西。