设置和获取配置文件中的值

时间:2010-06-28 05:13:04

标签: c linux

我使用C语言和Linux作为我的编程平台。

在我的示例应用程序中。我想获取并设置自定义配置文件的值。以下是我的配置文件的结构。

idlevalue=5
sleeping=1

现在我的问题是我很难想到如何在我的应用程序中实现设置功能。<​​/ p>

我打算获取该文件的所有内容。然后将指针的位置设置为特定值,然后更改该值。然后再次将所有数据写入文件。

似乎在配置文件中设置一个值比获取更难。

请建议。

4 个答案:

答案 0 :(得分:2)

SO还有其他密切相关的问题。

libconfig这样的库可以为你处理这类东西。

答案 1 :(得分:2)

编辑:我删除了“不要当作数据库”,意识到你在概念上就是这样对待......想法是在配置文件的顶部有一个API:)

编写代码来解析并将所有变量读入内存。保存配置文件时,只需再次保存所有变量,而不是尝试找到一个特定变量并仅修改该特定变量的值。

这样的事情会很好:

char *config_file_path = "/foo/bar.conf";
struct config {...} myconfig;
read_config(config_file_path, &myconfig);
// set a value
myconfig.somevalue = 5;
// When re-writing, routine simply over-writes the entire file.
write_config(config_file_path, &myconfig);

您只需要在用户保存配置时写出文件,因此以这种方式执行此操作不会成为您应用中的巨大瓶颈。

答案 2 :(得分:1)

当然 - 困难的部分是您要替换的数据可能与您要替换它的数据大小不同。

通常的解决方案,特别是对于简单的配置文件,只需从内存中写出配置文件的完整新副本,其中包含 all 设置。您在临时名称下创建一个新文件,将配置写入其中,调用fsync()将其同步到磁盘,然后rename()通过旧配置文件。 (此过程意味着即使您的应用程序或计算机在编写配置文件时崩溃,您也不会得到损坏的配置文件。)

答案 3 :(得分:1)

据我所知,显然从文件中获取数据更容易。 对于更改值,有一个更简单的解决方案,即您拥有某些结构中的所有数据,并且当您想要更改某些值时,请在结构中更改它们,然后将整个结构复制回文件。

如果只有一个更改并且您不愿意将整个数据写回文件,则可以通过在“追加”模式下读取文件来修改所需的值,并查找您的名称-value对然后更改值。实现它需要花费更多的精力,而不仅仅是将所有数据再次复制到文件中,但这是一种更好的方式来做你想要的。