nuttx-apps/fsutils/inifile/README.md

145 lines
5.1 KiB
Markdown
Raw Normal View History

2020-07-23 15:19:35 +02:00
# File System Utilities / `inifile` INI File
2014-01-16 16:27:31 +01:00
2020-07-23 15:19:35 +02:00
## Syntax
2014-01-16 16:27:31 +01:00
2020-07-23 15:19:35 +02:00
This directory contains a very simple INI file parser. An INI file consists of a
sequence of lines up to the end of file. A line may be one of the following:
2014-01-16 16:27:31 +01:00
2020-07-23 15:19:35 +02:00
1. A blank line.
2014-01-16 16:27:31 +01:00
2020-07-23 15:19:35 +02:00
2. A comment line. Any line beginning with `;`
2014-01-16 16:27:31 +01:00
2020-07-23 15:19:35 +02:00
3. A section header. Definitions are divided into sections. Each section begins
with a line containing the section name enclosed in square brackets. For
example, `[section1]`. The left bracket must be the first character on the
line. Section names are case insensitive, i.e., `SECTION1` and `Section1`
refer to the same section.
2014-01-16 16:27:31 +01:00
2020-07-23 15:19:35 +02:00
4. Variable assignments. A variable assignment is a variable name followed by
the `=` sign and then the value of the variable. For example, `A=B`: `A` is
the variable name; `B` is the variable value. All variables following the
section header belong in the section.
2014-01-16 16:27:31 +01:00
2020-07-23 15:19:35 +02:00
Variable names may be preceded with white space. Whitespace is not permitted
before the `=` sign. Variable names are case insensitive, i.e., `A` and `a`
refer to the same variable name.
2014-01-16 16:27:31 +01:00
2020-07-23 15:19:35 +02:00
Variable values may be numeric (any base) or a string. The case of string
arguments is preserved.
2014-01-16 16:27:31 +01:00
2020-07-23 15:19:35 +02:00
## Programming Interfaces
2014-01-16 16:27:31 +01:00
2020-07-23 15:19:35 +02:00
See `apps/include/fsutils/inifile.h` for interfaces supported by the INI file
parser.
2014-01-16 16:27:31 +01:00
2020-07-23 15:19:35 +02:00
## Test Program
2014-01-16 16:27:31 +01:00
2020-07-23 15:19:35 +02:00
Below is a simple test program:
2014-01-16 16:27:31 +01:00
2020-07-23 15:19:35 +02:00
```c
2014-01-16 16:27:31 +01:00
int main(int argc, char *argv[])
{
INIHANDLE handle;
FILE *stream;
FAR char *ptr;
long value;
stream = fopen("/tmp/file.ini", "w");
fprintf(stream, "; Test INI file\n");
fprintf(stream, "[section1]\n");
fprintf(stream, " VAR1=1\n");
fprintf(stream, " VAR2=2\n");
fprintf(stream, " VAR3=3\n");
fprintf(stream, "\n");
fprintf(stream, "[section2]\n");
fprintf(stream, " VAR4=4\n");
fprintf(stream, " VAR5=5\n");
fprintf(stream, "VAR6=6\n");
fprintf(stream, "\n");
fclose(stream);
handle = inifile_initialize("/tmp/file.ini");
ptr = inifile_read_string(handle, "section2", "VAR5", "OOPS");
printf("Section: %s Variable: %s String: %s\n", "section2", "VAR5", ptr);
inifile_free_string(ptr);
ptr = inifile_read_string(handle, "section1", "VAR2", "OOPS");
printf("Section: %s Variable: %s String: %s\n", "section1", "VAR2", ptr);
inifile_free_string(ptr);
ptr = inifile_read_string(handle, "section3", "VAR3", "OOPS");
printf("Section: %s Variable: %s String: %s\n", "section3", "VAR3", ptr);
inifile_free_string(ptr);
ptr = inifile_read_string(handle, "section1", "VAR3", "OOPS");
printf("Section: %s Variable: %s String: %s\n", "section1", "VAR3", ptr);
inifile_free_string(ptr);
ptr = inifile_read_string(handle, "section1", "VAR1", "OOPS");
printf("Section: %s Variable: %s String: %s\n", "section1", "VAR1", ptr);
inifile_free_string(ptr);
ptr = inifile_read_string(handle, "section1", "VAR42", "OOPS");
printf("Section: %s Variable: %s String: %s\n", "section1", "VAR42", ptr);
inifile_free_string(ptr);
ptr = inifile_read_string(handle, "section2", "VAR6", "OOPS");
printf("Section: %s Variable: %s String: %s\n", "section2", "VAR6", ptr);
inifile_free_string(ptr);
ptr = inifile_read_string(handle, "section2", "VAR4", "OOPS");
printf("Section: %s Variable: %s String: %s\n", "section2", "VAR4", ptr);
inifile_free_string(ptr);
value = inifile_read_integer(handle, "section1", "VAR3", 0);
printf("Section: %s Variable: %s Value: %ld\n", "section1", "VAR3", value);
value = inifile_read_integer(handle, "section3", "VAR3", 0);
printf("Section: %s Variable: %s String: %ld\n", "section3", "VAR3", value);
value = inifile_read_integer(handle, "section1", "VAR1", 0);
printf("Section: %s Variable: %s Value: %ld\n", "section1", "VAR1", value);
value = inifile_read_integer(handle, "section2", "VAR5", 0);
printf("Section: %s Variable: %s Value: %ld\n", "section2", "VAR5", value);
value = inifile_read_integer(handle, "section2", "VAR6", 0);
printf("Section: %s Variable: %s Value: %ld\n", "section2", "VAR6", value);
value = inifile_read_integer(handle, "section1", "VAR42", 0);
printf("Section: %s Variable: %s String: %ld\n", "section1", "VAR42", value);
value = inifile_read_integer(handle, "section1", "VAR2", 0);
printf("Section: %s Variable: %s Value: %ld\n", "section1", "VAR2", value);
value = inifile_read_integer(handle, "section2", "VAR4", 0);
printf("Section: %s Variable: %s Value: %ld\n", "section2", "VAR4", value);
inifile_uninitialize(handle);
return 0;
}
2020-07-23 15:19:35 +02:00
```
2014-01-16 16:27:31 +01:00
Test program output:
2020-07-23 15:19:35 +02:00
```
2014-01-16 16:27:31 +01:00
Section: section2 Variable: VAR5 String: 5
Section: section1 Variable: VAR2 String: 2
Section: section3 Variable: VAR3 String: OOPS
Section: section1 Variable: VAR3 String: 3
Section: section1 Variable: VAR1 String: 1
Section: section1 Variable: VAR42 String: OOPS
Section: section2 Variable: VAR6 String: 6
Section: section2 Variable: VAR4 String: 4
Section: section1 Variable: VAR3 Value: 3
Section: section3 Variable: VAR3 Value: 0
Section: section1 Variable: VAR1 Value: 1
Section: section2 Variable: VAR5 Value: 5
Section: section2 Variable: VAR6 Value: 6
Section: section1 Variable: VAR42 String: 0
Section: section1 Variable: VAR2 Value: 2
Section: section2 Variable: VAR4 Value: 4
2020-07-23 15:19:35 +02:00
```