Use an INI file in C on Linux

2019-01-23 02:40发布

问题:

Is there a standard way of reading a kind of configuration like INI files for Linux using C?

I am working on a Linux based handheld and writing code in C.

Otherwise, I shall like to know about any alternatives.

Final update:

I have explored and even used LibConfig. But the footprint is high and my usage is too simple. So, to reduce the footprint, I have rolled out my own implementation. The implementation is not too generic, in fact quite coupled as of now. The configuration file is parsed once at the time of starting the application and set to some global variables.

回答1:

Try libconfig:

a simple library for processing structured configuration files, like this one: test.cfg. This file format is more compact and more readable than XML. And unlike XML, it is type-aware, so it is not necessary to do string parsing in application code.

Libconfig is very compact — a fraction of the size of the expat XML parser library. This makes it well-suited for memory-constrained systems like handheld devices.

The library includes bindings for both the C and C++ languages. It works on POSIX-compliant UNIX and UNIX-like systems (GNU/Linux, Mac OS X, Solaris, FreeBSD), Android, and Windows (2000, XP and later)...



回答2:

No, there isn't one standard way. I'm sorry, but that is probably the most precise answer :)

You could look at this list of Linux configuration file libraries, though. That might be helpful.



回答3:

Here are four options:

  1. Iniparser
  2. libini
  3. sdl-cfg
  4. RWini


回答4:

If you can use the (excellent, in any C-based application) glib, it has a key-value file parser that is suitable for .ini-style files. Of course, you'd also get access to the various (very nice) data structures in glib, "for free".



回答5:

There is an updated fork of iniparser at ccan, the original author has not been able to give it much attention over the years. Disclaimer - I maintain it.

Additionally, iniparser contains a dictionary that is very useful on its own.



回答6:

If you need a fast and small code just for reading config files I suggest the inih

It loads the config file content just once, parse the content and calls a callback function for each key/value pair.

Really small. It can be used on embedded systems too.



回答7:

I hate to suggest something entirely different in suggesting XML, but libexpat is pretty minimal, but does XML.

I came to this conclusion as I had the same question as you did, but then I realized the project already had libexpat linked-in--and I should probably just use that.