我使用C语言和Linux作为我的编程平台。
在我的示例应用程序中。我想获取并设置自定义配置文件的值。以下是我的配置文件的结构。
idlevalue=5
sleeping=1
现在我的问题是我很难想到如何在我的应用程序中实现设置功能。</ p>
我打算获取该文件的所有内容。然后将指针的位置设置为特定值,然后更改该值。然后再次将所有数据写入文件。
似乎在配置文件中设置一个值比获取更难。
请建议。
答案 0 :(得分:2)
答案 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对然后更改值。实现它需要花费更多的精力,而不仅仅是将所有数据再次复制到文件中,但这是一种更好的方式来做你想要的。