Simple Read A Configuration File Into Struct Example

Simple C program that reads in a basic text based configuration file line by line. Each line has the deliminator "=" removed and enters the value intro a simple struct that could be used by the program.

/*
 * reader.c
 * Simple program to read file into a config struct
 * gcc -Wall reader.c -o reader
 */
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define FILENAME "config.conf"
#define MAXBUF 1024
#define DELIM "="

struct config
{
   char imgserver[MAXBUF];
   char ccserver[MAXBUF];
   char port[MAXBUF];
   char imagename[MAXBUF];
   char getcmd[MAXBUF];
};

struct config get_config(char *filename)
{
        struct config configstruct;
        FILE *file = fopen (filename, "r");

        if (file != NULL)
        {
                char line[MAXBUF];
                int i = 0;

                while(fgets(line, sizeof(line), file) != NULL)
                {
                        char *cfline;
                        cfline = strstr((char *)line,DELIM);
                        cfline = cfline + strlen(DELIM);
   
                        if (i == 0){
                                memcpy(configstruct.imgserver,cfline,strlen(cfline));
                                //printf("%s",configstruct.imgserver);
                        } else if (i == 1){
                                memcpy(configstruct.ccserver,cfline,strlen(cfline));
                                //printf("%s",configstruct.ccserver);
                        } else if (i == 2){
                                memcpy(configstruct.port,cfline,strlen(cfline));
                                //printf("%s",configstruct.port);
                        } else if (i == 3){
                                memcpy(configstruct.imagename,cfline,strlen(cfline));
                                //printf("%s",configstruct.imagename);
                        } else if (i == 4){
                                memcpy(configstruct.getcmd,cfline,strlen(cfline));
                                //printf("%s",configstruct.getcmd);
                        }
                       
                        i++;
                } // End while
        } // End if file
       
        fclose(file);   
       
        return configstruct;

}

int main(int argc, char **argv)
{
        struct config configstruct;
       
        configstruct = get_config(FILENAME);
       
        /* Struct members */
        printf("%s",configstruct.imgserver);
        printf("%s",configstruct.ccserver);
        printf("%s",configstruct.port);
        printf("%s",configstruct.imagename);
        printf("%s",configstruct.getcmd);
       
        /* Cast port as int */
        int x;
        x = atoi(configstruct.port);
        printf("%d\n",x);
               
        return 0;
}

Config.config sample configuration file's contents:

IMGSERVER=<a href="http://www.pacificsimplicty.ca
CCSERVER=www.omnom.com
PORT=80
IMAGE=image.png
GET=/sites/default/files/image.png

">www.pacificsimplicty.ca
CCSERVER=www.omnom.com
PORT=80
IMAGE=image.png
G...

Add new comment

Filtered HTML

  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd> <python> <c>
  • Lines and paragraphs break automatically.

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
By submitting this form, you accept the Mollom privacy policy.