您的位置:首页 > 其它

C实现配置文件信息读取

2018-01-19 10:35 218 查看
 
         在嵌入式应用开发中,我们常需要从某些配置文件中去读取某些所需的信息,此处我们以一个简单的例子为例,来介绍一种基本的配置文件信息提取的方式。
         在文件系统中的有一个文件mac.txt存储着设备的MAC信息,设备在初始化时需要去获取到这个mac信息并进行后续的操作处理。mac.txt的内容如下:
      


         我们编写一个简单的程序去获取文件中的MAC地址内容。
        
源文件// mac_recognize.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include <string.h>

/**ADD***********************************************************************

* Function: ofp_get_mac_from_file

* Purpose : read file to get mac address

* return : TRUE or FLASE

* IN : uchar *data_start

* OUT : uchar *mac_address

* Author : 2016-04-14

****************************************************************************/

NBB_VOID ofp_get_mac_from_file(NBB_BYTE*mac_address, NBB_BYTE *data_start)

{

/* 定义循环所需局部变量*/

NBB_ULONGvnumber = 0;

NBB_ULONGloop = 0;

NBB_ULONGvbit = 0;

/* 临时数组,用于将字符合并为进制整数*/

NBB_ULONGtmp[4] = {0};

/* 将MAC的个部分分开存储*/

NBB_ULONGmacdata[6] = {0};

printf("ofp_get_mac_from_file\n");

if(mac_address == NULL)

{

printf("ofpsck2.c mac_address\n");

goto EXIT_LABEL;

}

if(data_start == NULL)

{

printf("ofpsck2.c data_start\n");

goto EXIT_LABEL;

}

/* 逐个字符解析mac 字符串*/

while(loop < 6)

{

if((data_start[vbit] == ':')|| (data_start[vbit] == '-') ||

(data_start[vbit] == '\0' || (data_start[vbit] == '\r'))||

(data_start[vbit] == '\n'))

{

switch (vnumber)

{

case 1:

macdata[loop]= tmp[0];

break;

case 2:

macdata[loop]= tmp[0] * 16 + tmp[1];

break;

default:

break;

}

if(macdata[loop] > 255)

{

printf("The mac %d is out of bound!\n",loop);

goto EXIT_LABEL;

}

/* 将临时数据清空*/

vnumber= 0;

memset(tmp,0, sizeof(NBB_ULONG) * 4);

/* 下一位,下一个ip字节*/

vbit++;

loop++;

continue;

}

else

{

/* 将单个字符转化为整型*/

if ((data_start[vbit] >= '0')&& (data_st
4000
art[vbit] <= '9'))

tmp[vnumber]= (NBB_ULONG)(data_start[vbit] - '0');

elseif ((data_start[vbit] >= 'a') && (data_start[vbit] <= 'f'))

tmp[vnumber]= (NBB_ULONG)(data_start[vbit] - 'a' +10);

elseif ((data_start[vbit] >= 'A') && (data_start[vbit] <= 'F'))

tmp[vnumber]= (NBB_ULONG)(data_start[vbit] - 'A' +10);

else

tmp[vnumber]= 0;

vbit++;

vnumber++;

}

}

/* 为MAC 地址指针赋值*/

mac_address[0]= (NBB_BYTE)macdata[0];

mac_address[1]= (NBB_BYTE)macdata[1];

mac_address[2]= (NBB_BYTE)macdata[2];

mac_address[3]= (NBB_BYTE)macdata[3];

mac_address[4]= (NBB_BYTE)macdata[4];

mac_address[5]= (NBB_BYTE)macdata[5];

EXIT_LABEL:

return;

}

/**MOD***********************************************************************

* Function: ofp_init_switch_info

* Purpose : 初始化交换机MAC等相关信息

* return : TRUE or FLASE

* IN : void

* OUT : void

* Author : 2018-01-18

****************************************************************************/

NBB_VOID ofp_init_switch_info()

{

OS_FILE *switch_file = NULL;

NBB_BYTEtemp_buf[OFP_BUFFER_SIZE] = {0};

NBB_BYTEtemp_content[OFP_BUFFER_SIZE] = {0};

NBB_BYTEtemp_value[OFP_BUFFER_SIZE] = {0};

NBB_BYTEmac_info[6] = {0};

NBB_BYTEcount = 0;

printf("ofp_init_switch_info\n");

/* 只读模式打开版本文件*/

switch_file = OS_FOPEN(SWITCH_FILE_PATH,"r");

if(switch_file == NULL)

{

printf("switch_info file is notexsit!\n");

goto EXIT_LABEL;

}

/* 按行读取文件,选择性获取数据*/

while(NULL != OS_FGETS((char *)temp_buf, OFP_BUFFER_SIZE, switch_file))

{

sscanf((char*)temp_buf,"%[^=]=%s\n",temp_content,temp_value);

if(0 == NBB_MEMCMP(temp_content,"mac",3))

{

ofp_get_mac_from_file(mac_info,temp_value);

printf("The MAC addr is :");

for(count = 0;count < 6; count++)

{

printf("%02X ",mac_info[count]);

}

printf("\n");

}

}

/* 关闭文件句柄*/

OS_FCLOSE(switch_file);

switch_file = NULL;

EXIT_LABEL:

return;

}

int_tmain(int argc, _TCHAR* argv[])

{

ofp_init_switch_info();

getchar();

return 0;

}

  头文件// stdafx.h : 标准系统包含文件的包含文件,

// 或是经常使用但不常更改的

// 特定于项目的包含文件

//

#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
#defineOS_FILE FILE
#defineOFP_BUFFER_SIZE 64
#defineSWITCH_FILE_PATH "D:/4-Temp/temp_obj/mac_recognize/mac_recognize/mac.txt"

typedef unsigned char NBB_BYTE; /* 8 bits */
typedef char NBB_CHAR; /* */
typedef short NBB_SHORT; /* 2 byte signed integer */
typedef unsigned short NBB_USHORT; /* 2 byte unsignedinteger */
typedef long NBB_LONG; /* 4 byte signedinteger */
typedef unsigned long NBB_ULONG; /* 4 byteunsigned integer */
typedef int NBB_INT; /* >= 2 bytesigned integer (machine */
/* word) */
typedef unsigned int NBB_UINT; /* >= 2 byteunsigned integer */
/* machine word) */
typedef int NBB_BOOL; /* boolean */
typedef void NBB_VOID; /* void ifsupported, char otherwise */

#defineOS_FOPEN(FILE, MODE) fopen((FILE), (MODE))
#defineOS_REMOVE(FILE) remove(FILE)
#defineOS_RENAME(OLDNAME, NEWNAME) rename((OLDNAME), (NEWNAME))
#defineOS_SETVBUF(STREAM, BUF, TYPE, SIZE) \
setvbuf((STREAM), (BUF), (TYPE), (SIZE))
#defineOS_FCLOSE(FILE) fclose(FILE)
#defineOS_FGETS(DEST, LENGTH, FILE) fgets((DEST), (LENGTH), (FILE))
#defineOS_FFLUSH(FILE) fflush(FILE)
#defineOS_FWRITE(DT, B, LEN, FILE) fwrite(DT, B, LEN, FILE)
#defineOS_FSEEK(FILE, NUM, QUAL) fseek(FILE, NUM, QUAL)
#defineOS_FTELL(FILE) ftell(FILE)

#defineNBB_MEMCMP(MEM1, MEM2, LENGTH) \
memcmp((MEM1),(MEM2), (size_t)(LENGTH))

// TODO: 在此处引用程序需要的其他头文件执行结果:



这样我们就将配置文件中所需的信息提取出来了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: