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: 在此处引用程序需要的其他头文件执行结果:
这样我们就将配置文件中所需的信息提取出来了。
相关文章推荐
- wxpython实现界面,读取excel配置文件并查询道具信息
- samba unix风格的配置文件配置信息读取C代码.
- 全局变量的单例模式 从指定的配置文件中读取配置信息
- Java Properties 类读取配置文件信息
- 用递归方法实现读取文件夹下所有文件信息
- Java Properties 类读取配置文件信息
- Java Properties 类读取配置文件信息
- Sqlserver:从XML文件中读取配置信息
- 读取配置文件[方式一]之纯C语言实现
- java中经常用到的读写配置文件的信息properties属性的写入,读取例子
- 读取配置文件[方式二]之使用Awk实现
- 利用Java的Properties类读取配置文件信息
- Sqlserver:从XML文件中读取配置信息
- 利用Java的Properties 类读取配置文件信息
- Java Properties 类读取配置文件信息
- Java Properties 类读取配置文件信息
- Java Properties 类读取配置文件信息,Java properties文件的操作(zz)
- JFig读取配置文件,实现动态加载
- Java Properties 类读取配置文件信息
- 用asp.net如何实现自动读取mp3文件信息