Linux下配置文件读取操作流程及其C代码实现

一、概述 
Linux具有免费、可靠、安全、稳定、多平台等特点,因此深受广大程序员的欢迎。 
为了体现软件产品的灵活性,可添加配置文件存放某些重要的参数,在部署的时候根据实际的安装环境对每个配置项的值进行设置。这就要求程序能够准确读取到各个配置项的值。 
本文详细介绍了Linux下配置文件的读取方法及读取操作的C代码实现,为相关的软件开发工作的开展提供了有益的参考。

二、配置文件介绍 
为了便于程序处理,对配置文件的命名及内容格式有一些约定,具体如下: 
第一,配置文件的后缀为ini,如本文中使用到的配置文件为:Config.ini。 
第二,配置文件的内容由段名、注释和配置项组成,其中,段名由[]括起来,注释的内容以分号(;)开头,配置项采用等号(=)进行赋值。 
本文使用的配置文件“Config.ini”包含的具体内容如下:

<code class="hljs ini has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 102, 102);">[EMPLOYEEINFO]</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;the name of employee</span>
<span class="hljs-setting" style="box-sizing: border-box;">EmployeeName=<span class="hljs-value" style="box-sizing: border-box;">wang</span></span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;the age of employee</span>
<span class="hljs-setting" style="box-sizing: border-box;">EmployeeAge=<span class="hljs-value" style="box-sizing: border-box;"><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">25</span></span></span>

<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 102, 102);">[EMPLOYERINFO]</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;the name of employer</span>
<span class="hljs-setting" style="box-sizing: border-box;">EmployerName=<span class="hljs-value" style="box-sizing: border-box;">zhou</span></span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;the age of employer</span>
<span class="hljs-setting" style="box-sizing: border-box;">EmployerAge=<span class="hljs-value" style="box-sizing: border-box;"><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">38</span></span></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li></ul>

三、配置文件读取操作总体流程 
实现配置文件读取操作的程序流程如图1所示。 
这里写图片描述 
图1 配置文件读取操作程序流程

四、配置文件读取操作重要流程 
1.获取配置文件的全路径 
在本文中,配置文件存放的全路径为:/home/zhou/zhouzx/GetConfig/ Config.ini。实现获取配置文件的全路径的程序函数为GetCompletePath(具体代码见后)。 
说明: 
(1) 函数getenv用来获取某参数的环境变量的内容。getenv(“HOME”)用于获取程序所在的当前用户的全路径。例如,本程序放在了zhou用户下,那么getenv(“HOME”)的值就为“/home/zhou”。 
(2) Linux下目录之间的分隔符为“/”,这个与Windows下的分隔符有区别。

2.匹配段名和配置项名,并获取配置项的值 
程序首先找到段名,然后在该段之下去匹配配置项名,最后获取配置项的值。 
程序流程如图2所示。 
这里写图片描述 
图2 获取配置项值的程序流程

实现该功能的程序函数为GetStringContentValue(具体代码见后)。

五、对配置文件读取操作的测试 
为了对编写的配置文件读取操作程序进行测试,定义了员工信息结构体和雇主信息结构体,分别用于存放从配置文件中读取到的员工信息和雇主信息。在main函数中将获取到的信息打印出来,以此来检查程序操作的正确性。

六、C程序实现 
本程序命名为“GetConfig.c”,具体代码如下:

<code class="hljs markdown has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">/<span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span>
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>版权所有 (C)2015, Zhou Zhaoxiong。
<span class="hljs-bullet" style="box-sizing: border-box;">*
</span><span class="hljs-bullet" style="box-sizing: border-box;">* </span>文件名称:GetConfig.c
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>文件标识:无
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>内容摘要:演示Linux下配置文件的读取方法
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>其它说明:无
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>当前版本:V1.0
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>作    者:Zhou Zhaoxiong
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>完成日期:20150507
<span class="hljs-bullet" style="box-sizing: border-box;">*
</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span>/
<span class="hljs-header" style="box-sizing: border-box;">#include <stdio.h></span>
<span class="hljs-header" style="box-sizing: border-box;">#include <stdlib.h></span>
<span class="hljs-header" style="box-sizing: border-box;">#include <string.h></span>

// 数据类型重定义
typedef unsigned char   UINT8;
typedef signed   int    INT32;
typedef unsigned int    UINT32;

// 员工信息结构体定义
typedef struct
{
<span class="hljs-code" style="box-sizing: border-box;">    UINT8  szEmployeeName[128];    // 员工姓名</span>
<span class="hljs-code" style="box-sizing: border-box;">    INT32  iEmployeeAge;           // 员工年龄</span>
} T_EmployeeInfo;

// 雇主信息结构体定义
typedef struct
{
<span class="hljs-code" style="box-sizing: border-box;">    UINT8  szEmployerName[128];    // 雇主姓名</span>
<span class="hljs-code" style="box-sizing: border-box;">    INT32  iEmployerAge;           // 雇主年龄</span>
} T_EmployerInfo;

// 函数声明
void GetCompletePath(UINT8 <span class="hljs-emphasis" style="box-sizing: border-box;">*pszConfigFileName, UINT8 *</span>pszWholePath);
void GetStringContentValue(FILE <span class="hljs-emphasis" style="box-sizing: border-box;">*fp, UINT8 *</span>pszSectionName, UINT8 <span class="hljs-emphasis" style="box-sizing: border-box;">*pszKeyName, UINT8 *</span>pszOutput, UINT32 iOutputLen);
void GetConfigFileStringValue(UINT8 <span class="hljs-emphasis" style="box-sizing: border-box;">*pszSectionName, UINT8 *</span>pszKeyName, UINT8 <span class="hljs-emphasis" style="box-sizing: border-box;">*pDefaultVal, UINT8 *</span>pszOutput, UINT32 iOutputLen, UINT8 *pszConfigFileName);
INT32 GetConfigFileIntValue(UINT8 <span class="hljs-emphasis" style="box-sizing: border-box;">*pszSectionName, UINT8 *</span>pszKeyName, UINT32 iDefaultVal, UINT8 *pszConfigFileName);
INT32 main();


/<span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span>
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>功能描述:主函数
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>输入参数:无
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>输出参数:无
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>返 回 值:无
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>其它说明:无
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>修改日期         版本号         修改人            修改内容
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>---------------------------------------------------------------
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>20150507        V1.0     Zhou Zhaoxiong          创建
<span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span>*/
INT32 main()
{
<span class="hljs-code" style="box-sizing: border-box;">    T_EmployeeInfo tEmployeeInfo = {0};</span>
<span class="hljs-code" style="box-sizing: border-box;">    T_EmployerInfo tEmployerInfo = {0};</span>

<span class="hljs-code" style="box-sizing: border-box;">    // 获取并打印员工信息</span>
<span class="hljs-code" style="box-sizing: border-box;">    // 获取员工姓名</span>
<span class="hljs-code" style="box-sizing: border-box;">    GetConfigFileStringValue("EMPLOYEEINFO", "EmployeeName", "", tEmployeeInfo.szEmployeeName, sizeof(tEmployeeInfo.szEmployeeName), "Config.ini");</span>

<span class="hljs-code" style="box-sizing: border-box;">    // 获取员工年龄</span>
<span class="hljs-code" style="box-sizing: border-box;">    tEmployeeInfo.iEmployeeAge = GetConfigFileIntValue("EMPLOYEEINFO", "EmployeeAge", 20, "Config.ini");</span>
<span class="hljs-code" style="box-sizing: border-box;">    if (tEmployeeInfo.iEmployeeAge == -1)  // 判断获取到的年龄是否正确</span>
<span class="hljs-code" style="box-sizing: border-box;">    {</span>
<span class="hljs-code" style="box-sizing: border-box;">        printf("Get EmployeeAge failed!\n");</span>
<span class="hljs-code" style="box-sizing: border-box;">        return -1;</span>
<span class="hljs-code" style="box-sizing: border-box;">    }</span>

<span class="hljs-code" style="box-sizing: border-box;">    // 打印读取到的员工姓名和年龄</span>
<span class="hljs-code" style="box-sizing: border-box;">    printf("EmployeeName is %s, EmployeeAge is %d\n", tEmployeeInfo.szEmployeeName, tEmployeeInfo.iEmployeeAge);</span>

<span class="hljs-code" style="box-sizing: border-box;">    // 获取并打印雇主信息</span>
<span class="hljs-code" style="box-sizing: border-box;">    // 获取雇主姓名</span>
<span class="hljs-code" style="box-sizing: border-box;">    GetConfigFileStringValue("EMPLOYERINFO", "EmployerName", "", tEmployerInfo.szEmployerName, sizeof(tEmployerInfo.szEmployerName), "Config.ini");</span>

<span class="hljs-code" style="box-sizing: border-box;">    // 获取员工年龄</span>
<span class="hljs-code" style="box-sizing: border-box;">    tEmployerInfo.iEmployerAge = GetConfigFileIntValue("EMPLOYERINFO", "EmployerAge", 30, "Config.ini");</span>
<span class="hljs-code" style="box-sizing: border-box;">    if (tEmployerInfo.iEmployerAge == -1)  // 判断获取到的年龄是否正确</span>
<span class="hljs-code" style="box-sizing: border-box;">    {</span>
<span class="hljs-code" style="box-sizing: border-box;">        printf("Get EmployerAge failed!\n");</span>
<span class="hljs-code" style="box-sizing: border-box;">        return -1;</span>
<span class="hljs-code" style="box-sizing: border-box;">    }</span>

<span class="hljs-code" style="box-sizing: border-box;">    // 打印读取到的员工姓名和年龄</span>
<span class="hljs-code" style="box-sizing: border-box;">    printf("EmployerName is %s, EmployerAge is %d\n", tEmployerInfo.szEmployerName, tEmployerInfo.iEmployerAge);</span>

<span class="hljs-code" style="box-sizing: border-box;">    return 0;              </span>
}


/<span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span>
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>功能描述: 获取配置文件完整路径(包含文件名)
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>输入参数: pszConfigFileName-配置文件名
<span class="hljs-code" style="box-sizing: border-box;">             pszWholePath-配置文件完整路径(包含文件名)</span>
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>输出参数: 无
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>返 回 值: 无
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>其它说明: 无
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>修改日期        版本号         修改人       修改内容
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>------------------------------------------------------------------
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>20150507       V1.0     Zhou Zhaoxiong     创建
<span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-emphasis" style="box-sizing: border-box;">***</span>/  
void GetCompletePath(UINT8 <span class="hljs-emphasis" style="box-sizing: border-box;">*pszConfigFileName, UINT8 *</span>pszWholePath)
{
<span class="hljs-code" style="box-sizing: border-box;">    UINT8 *pszHomePath      = NULL;</span>
<span class="hljs-code" style="box-sizing: border-box;">    UINT8  szWholePath[256] = {0};</span>

<span class="hljs-code" style="box-sizing: border-box;">    // 先对输入参数进行异常判断</span>
<span class="hljs-code" style="box-sizing: border-box;">    if (pszConfigFileName == NULL || pszWholePath == NULL)</span>
<span class="hljs-code" style="box-sizing: border-box;">    {</span>
<span class="hljs-code" style="box-sizing: border-box;">        printf("GetCompletePath: input parameter(s) is NULL!\n");</span>
<span class="hljs-code" style="box-sizing: border-box;">        return;</span>
<span class="hljs-code" style="box-sizing: border-box;">    }</span>

<span class="hljs-code" style="box-sizing: border-box;">    pszHomePath = (UINT8 *)getenv("HOME");     // 获取当前用户所在的路径</span>
<span class="hljs-code" style="box-sizing: border-box;">    if (pszHomePath == NULL)</span>
<span class="hljs-code" style="box-sizing: border-box;">    {</span>
<span class="hljs-code" style="box-sizing: border-box;">        printf("GetCompletePath: Can't find home path!\n");</span>
<span class="hljs-code" style="box-sizing: border-box;">        return;</span>
<span class="hljs-code" style="box-sizing: border-box;">    }</span>

<span class="hljs-code" style="box-sizing: border-box;">    // 拼装配置文件路径</span>
<span class="hljs-code" style="box-sizing: border-box;">    snprintf(szWholePath, sizeof(szWholePath)-1, "%s/zhouzx/GetConfig/%s", pszHomePath, pszConfigFileName);</span>

<span class="hljs-code" style="box-sizing: border-box;">    strncpy(pszWholePath, szWholePath, strlen(szWholePath));</span>
}


/<span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span>
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>功能描述: 获取具体的字符串值
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>输入参数: fp-配置文件指针
<span class="hljs-code" style="box-sizing: border-box;">             pszSectionName-段名, 如: GENERAL</span>
<span class="hljs-code" style="box-sizing: border-box;">             pszKeyName-配置项名, 如: EmployeeName</span>
<span class="hljs-code" style="box-sizing: border-box;">             iOutputLen-输出缓存长度</span>
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>输出参数: pszOutput-输出缓存
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>返 回 值: 无
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>其它说明: 无
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>修改日期         版本号        修改人       修改内容
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>------------------------------------------------------------------
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>20150507       V1.0     Zhou Zhaoxiong     创建
<span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-emphasis" style="box-sizing: border-box;">***</span>/
void GetStringContentValue(FILE <span class="hljs-emphasis" style="box-sizing: border-box;">*fp, UINT8 *</span>pszSectionName, UINT8 <span class="hljs-emphasis" style="box-sizing: border-box;">*pszKeyName, UINT8 *</span>pszOutput, UINT32 iOutputLen)
{
<span class="hljs-code" style="box-sizing: border-box;">    UINT8  szSectionName[100]    = {0};</span>
<span class="hljs-code" style="box-sizing: border-box;">    UINT8  szKeyName[100]        = {0};</span>
<span class="hljs-code" style="box-sizing: border-box;">    UINT8  szContentLine[256]    = {0};</span>
<span class="hljs-code" style="box-sizing: border-box;">    UINT8  szContentLineBak[256] = {0};</span>
<span class="hljs-code" style="box-sizing: border-box;">    UINT32 iContentLineLen       = 0;</span>
<span class="hljs-code" style="box-sizing: border-box;">    UINT32 iPositionFlag         = 0;</span>

<span class="hljs-code" style="box-sizing: border-box;">    // 先对输入参数进行异常判断</span>
<span class="hljs-code" style="box-sizing: border-box;">    if (fp == NULL || pszSectionName == NULL || pszKeyName == NULL || pszOutput == NULL)</span>
<span class="hljs-code" style="box-sizing: border-box;">    {</span>
<span class="hljs-code" style="box-sizing: border-box;">        printf("GetStringContentValue: input parameter(s) is NULL!\n");</span>
<span class="hljs-code" style="box-sizing: border-box;">        return;</span>
<span class="hljs-code" style="box-sizing: border-box;">    }</span>

<span class="hljs-code" style="box-sizing: border-box;">    sprintf(szSectionName, "[%s]", pszSectionName);</span>
<span class="hljs-code" style="box-sizing: border-box;">    strcpy(szKeyName, pszKeyName);</span>

<span class="hljs-code" style="box-sizing: border-box;">    while (feof(fp) == 0)</span>
<span class="hljs-code" style="box-sizing: border-box;">    {</span>
<span class="hljs-code" style="box-sizing: border-box;">        memset(szContentLine, 0x00, sizeof(szContentLine));</span>
<span class="hljs-code" style="box-sizing: border-box;">        fgets(szContentLine, sizeof(szContentLine), fp);      // 获取段名</span>

<span class="hljs-code" style="box-sizing: border-box;">        // 判断是否是注释行(以;开头的行就是注释行)或以其他特殊字符开头的行</span>
<span class="hljs-code" style="box-sizing: border-box;">        if (szContentLine[0] == ';' || szContentLine[0] == '\r' || szContentLine[0] == '\n' || szContentLine[0] == '\0')</span>
<span class="hljs-code" style="box-sizing: border-box;">        {</span>
<span class="hljs-code" style="box-sizing: border-box;">            continue;</span>
<span class="hljs-code" style="box-sizing: border-box;">        }</span>

<span class="hljs-code" style="box-sizing: border-box;">        // 匹配段名</span>
<span class="hljs-code" style="box-sizing: border-box;">        if (strncasecmp(szSectionName, szContentLine, strlen(szSectionName)) == 0)     </span>
<span class="hljs-code" style="box-sizing: border-box;">        {</span>
<span class="hljs-code" style="box-sizing: border-box;">            while (feof(fp) == 0)</span>
<span class="hljs-code" style="box-sizing: border-box;">            {</span>
<span class="hljs-code" style="box-sizing: border-box;">                memset(szContentLine,    0x00, sizeof(szContentLine));</span>
<span class="hljs-code" style="box-sizing: border-box;">                memset(szContentLineBak, 0x00, sizeof(szContentLineBak));</span>
<span class="hljs-code" style="box-sizing: border-box;">                fgets(szContentLine, sizeof(szContentLine), fp);     // 获取字段值</span>

<span class="hljs-code" style="box-sizing: border-box;">                // 判断是否是注释行(以;开头的行就是注释行)</span>
<span class="hljs-code" style="box-sizing: border-box;">                if (szContentLine[0] == ';')</span>
<span class="hljs-code" style="box-sizing: border-box;">                {</span>
<span class="hljs-code" style="box-sizing: border-box;">                    continue;</span>
<span class="hljs-code" style="box-sizing: border-box;">                }</span>

<span class="hljs-code" style="box-sizing: border-box;">                memcpy(szContentLineBak, szContentLine, strlen(szContentLine));</span>

<span class="hljs-code" style="box-sizing: border-box;">                // 匹配配置项名</span>
<span class="hljs-code" style="box-sizing: border-box;">                if (strncasecmp(szKeyName, szContentLineBak, strlen(szKeyName)) == 0)     </span>
<span class="hljs-code" style="box-sizing: border-box;">                {</span>
<span class="hljs-code" style="box-sizing: border-box;">                    iContentLineLen = strlen(szContentLine);</span>
<span class="hljs-code" style="box-sizing: border-box;">                    for (iPositionFlag = strlen(szKeyName); iPositionFlag <= iContentLineLen; iPositionFlag ++)</span>
<span class="hljs-code" style="box-sizing: border-box;">                    {</span>
<span class="hljs-code" style="box-sizing: border-box;">                        if (szContentLine[iPositionFlag] == ' ')</span>
<span class="hljs-code" style="box-sizing: border-box;">                        {</span>
<span class="hljs-code" style="box-sizing: border-box;">                            continue;</span>
<span class="hljs-code" style="box-sizing: border-box;">                        }</span>
<span class="hljs-code" style="box-sizing: border-box;">                        if (szContentLine[iPositionFlag] == '=')</span>
<span class="hljs-code" style="box-sizing: border-box;">                        {</span>
<span class="hljs-code" style="box-sizing: border-box;">                            break;</span>
<span class="hljs-code" style="box-sizing: border-box;">                        }</span>

<span class="hljs-code" style="box-sizing: border-box;">                        iPositionFlag = iContentLineLen + 1;</span>
<span class="hljs-code" style="box-sizing: border-box;">                        break;</span>
<span class="hljs-code" style="box-sizing: border-box;">                    }</span>

<span class="hljs-code" style="box-sizing: border-box;">                    iPositionFlag = iPositionFlag + 1;    // 跳过=的位置</span>

<span class="hljs-code" style="box-sizing: border-box;">                    if (iPositionFlag > iContentLineLen)</span>
<span class="hljs-code" style="box-sizing: border-box;">                    {</span>
<span class="hljs-code" style="box-sizing: border-box;">                        continue;</span>
<span class="hljs-code" style="box-sizing: border-box;">                    }</span>

<span class="hljs-code" style="box-sizing: border-box;">                    memset(szContentLine, 0x00, sizeof(szContentLine));</span>
<span class="hljs-code" style="box-sizing: border-box;">                    strcpy(szContentLine, szContentLineBak + iPositionFlag);</span>

<span class="hljs-code" style="box-sizing: border-box;">                    // 去掉内容中的无关字符</span>
<span class="hljs-code" style="box-sizing: border-box;">                    for (iPositionFlag = 0; iPositionFlag < strlen(szContentLine); iPositionFlag ++)</span>
<span class="hljs-code" style="box-sizing: border-box;">                    {</span>
<span class="hljs-code" style="box-sizing: border-box;">                        if (szContentLine[iPositionFlag] == '\r' || szContentLine[iPositionFlag] == '\n' || szContentLine[iPositionFlag] == '\0')</span>
<span class="hljs-code" style="box-sizing: border-box;">                        {</span>
<span class="hljs-code" style="box-sizing: border-box;">                            szContentLine[iPositionFlag] = '\0';</span>
<span class="hljs-code" style="box-sizing: border-box;">                            break;</span>
<span class="hljs-code" style="box-sizing: border-box;">                        }</span>
<span class="hljs-code" style="box-sizing: border-box;">                    }</span>

<span class="hljs-code" style="box-sizing: border-box;">                    // 将配置项内容拷贝到输出缓存中</span>
<span class="hljs-code" style="box-sizing: border-box;">                    strncpy(pszOutput, szContentLine, iOutputLen-1);</span>
<span class="hljs-code" style="box-sizing: border-box;">                    break;</span>
<span class="hljs-code" style="box-sizing: border-box;">                }</span>
<span class="hljs-code" style="box-sizing: border-box;">                else if (szContentLine[0] == '[')</span>
<span class="hljs-code" style="box-sizing: border-box;">                {</span>
<span class="hljs-code" style="box-sizing: border-box;">                    break;</span>
<span class="hljs-code" style="box-sizing: border-box;">                }</span>
<span class="hljs-code" style="box-sizing: border-box;">            }</span>
<span class="hljs-code" style="box-sizing: border-box;">            break;</span>
<span class="hljs-code" style="box-sizing: border-box;">        }</span>
<span class="hljs-code" style="box-sizing: border-box;">    }</span>
}


/<span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span>
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>功能描述: 从配置文件中获取字符串
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>输入参数: pszSectionName-段名, 如: GENERAL
<span class="hljs-code" style="box-sizing: border-box;">             pszKeyName-配置项名, 如: EmployeeName</span>
<span class="hljs-code" style="box-sizing: border-box;">             pDefaultVal-默认值</span>
<span class="hljs-code" style="box-sizing: border-box;">             iOutputLen-输出缓存长度</span>
<span class="hljs-code" style="box-sizing: border-box;">             pszConfigFileName-配置文件名</span>
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>输出参数: pszOutput-输出缓存
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>返 回 值: 无
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>其它说明: 无
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>修改日期        版本号         修改人       修改内容
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>------------------------------------------------------------------
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>20150507       V1.0     Zhou Zhaoxiong     创建
<span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-emphasis" style="box-sizing: border-box;">***</span>/  
void GetConfigFileStringValue(UINT8 <span class="hljs-emphasis" style="box-sizing: border-box;">*pszSectionName, UINT8 *</span>pszKeyName, UINT8 <span class="hljs-emphasis" style="box-sizing: border-box;">*pDefaultVal, UINT8 *</span>pszOutput, UINT32 iOutputLen, UINT8 *pszConfigFileName)
{
<span class="hljs-code" style="box-sizing: border-box;">    FILE  *fp                    = NULL;</span>
<span class="hljs-code" style="box-sizing: border-box;">    UINT8  szWholePath[256]      = {0};</span>

<span class="hljs-code" style="box-sizing: border-box;">    // 先对输入参数进行异常判断</span>
<span class="hljs-code" style="box-sizing: border-box;">    if (pszSectionName == NULL || pszKeyName == NULL || pszOutput == NULL || pszConfigFileName == NULL)</span>
<span class="hljs-code" style="box-sizing: border-box;">    {</span>
<span class="hljs-code" style="box-sizing: border-box;">        printf("GetConfigFileStringValue: input parameter(s) is NULL!\n");</span>
<span class="hljs-code" style="box-sizing: border-box;">        return;</span>
<span class="hljs-code" style="box-sizing: border-box;">    }</span>

<span class="hljs-code" style="box-sizing: border-box;">    // 获取默认值</span>
<span class="hljs-code" style="box-sizing: border-box;">    if (pDefaultVal == NULL)</span>
<span class="hljs-code" style="box-sizing: border-box;">    {</span>
<span class="hljs-code" style="box-sizing: border-box;">        strcpy(pszOutput, "");</span>
<span class="hljs-code" style="box-sizing: border-box;">    }</span>
<span class="hljs-code" style="box-sizing: border-box;">    else</span>
<span class="hljs-code" style="box-sizing: border-box;">    {</span>
<span class="hljs-code" style="box-sizing: border-box;">        strcpy(pszOutput, pDefaultVal);</span>
<span class="hljs-code" style="box-sizing: border-box;">    }</span>

<span class="hljs-code" style="box-sizing: border-box;">    // 打开配置文件</span>
<span class="hljs-code" style="box-sizing: border-box;">    GetCompletePath(pszConfigFileName, szWholePath);</span>
<span class="hljs-code" style="box-sizing: border-box;">    fp = fopen(szWholePath, "r");</span>
<span class="hljs-code" style="box-sizing: border-box;">    if (fp == NULL)</span>
<span class="hljs-code" style="box-sizing: border-box;">    {</span>
<span class="hljs-code" style="box-sizing: border-box;">        printf("GetConfigFileStringValue: open %s failed!\n", szWholePath);</span>
<span class="hljs-code" style="box-sizing: border-box;">        return;</span>
<span class="hljs-code" style="box-sizing: border-box;">    }</span>

<span class="hljs-code" style="box-sizing: border-box;">    // 调用函数用于获取具体配置项的值</span>
<span class="hljs-code" style="box-sizing: border-box;">    GetStringContentValue(fp, pszSectionName, pszKeyName, pszOutput, iOutputLen);</span>

<span class="hljs-code" style="box-sizing: border-box;">    // 关闭文件</span>
<span class="hljs-code" style="box-sizing: border-box;">    fclose(fp);</span>
<span class="hljs-code" style="box-sizing: border-box;">    fp = NULL;</span>
}


/<span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span>
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>功能描述: 从配置文件中获取整型变量
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>输入参数: pszSectionName-段名, 如: GENERAL
<span class="hljs-code" style="box-sizing: border-box;">             pszKeyName-配置项名, 如: EmployeeName</span>
<span class="hljs-code" style="box-sizing: border-box;">             iDefaultVal-默认值</span>
<span class="hljs-code" style="box-sizing: border-box;">             pszConfigFileName-配置文件名</span>
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>输出参数: 无
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>返 回 值: iGetValue-获取到的整数值   -1-获取失败
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>其它说明: 无
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>修改日期         版本号       修改人        修改内容
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>------------------------------------------------------------------
<span class="hljs-bullet" style="box-sizing: border-box;">* </span>20150507       V1.0     Zhou Zhaoxiong     创建
<span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-strong" style="box-sizing: border-box;">*****</span><span class="hljs-emphasis" style="box-sizing: border-box;">***</span>/  
INT32 GetConfigFileIntValue(UINT8 <span class="hljs-emphasis" style="box-sizing: border-box;">*pszSectionName, UINT8 *</span>pszKeyName, UINT32 iDefaultVal, UINT8 *pszConfigFileName)
{
<span class="hljs-code" style="box-sizing: border-box;">    UINT8  szGetValue[512] = {0};</span>
<span class="hljs-code" style="box-sizing: border-box;">    INT32  iGetValue       = 0;</span>

<span class="hljs-code" style="box-sizing: border-box;">    // 先对输入参数进行异常判断</span>
<span class="hljs-code" style="box-sizing: border-box;">    if (pszSectionName == NULL || pszKeyName == NULL || pszConfigFileName == NULL)</span>
<span class="hljs-code" style="box-sizing: border-box;">    {</span>
<span class="hljs-code" style="box-sizing: border-box;">        printf("GetConfigFileIntValue: input parameter(s) is NULL!\n");</span>
<span class="hljs-code" style="box-sizing: border-box;">        return -1;</span>
<span class="hljs-code" style="box-sizing: border-box;">    }</span>

<span class="hljs-code" style="box-sizing: border-box;">    GetConfigFileStringValue(pszSectionName, pszKeyName, NULL, szGetValue, 512-1, pszConfigFileName);    // 先将获取的值存放在字符型缓存中</span>

<span class="hljs-code" style="box-sizing: border-box;">    if (szGetValue[0] == '\0' || szGetValue[0] == ';')    // 如果是结束符或分号, 则使用默认值</span>
<span class="hljs-code" style="box-sizing: border-box;">    {</span>
<span class="hljs-code" style="box-sizing: border-box;">        iGetValue = iDefaultVal;</span>
<span class="hljs-code" style="box-sizing: border-box;">    }</span>
<span class="hljs-code" style="box-sizing: border-box;">    else</span>
<span class="hljs-code" style="box-sizing: border-box;">    {</span>
<span class="hljs-code" style="box-sizing: border-box;">        iGetValue = atoi(szGetValue);</span>
<span class="hljs-code" style="box-sizing: border-box;">    }</span>

<span class="hljs-code" style="box-sizing: border-box;">    return iGetValue;</span>
}
</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li><li style="box-sizing: border-box; padding: 0px 5px;">54</li><li style="box-sizing: border-box; padding: 0px 5px;">55</li><li style="box-sizing: border-box; padding: 0px 5px;">56</li><li style="box-sizing: border-box; padding: 0px 5px;">57</li><li style="box-sizing: border-box; padding: 0px 5px;">58</li><li style="box-sizing: border-box; padding: 0px 5px;">59</li><li style="box-sizing: border-box; padding: 0px 5px;">60</li><li style="box-sizing: border-box; padding: 0px 5px;">61</li><li style="box-sizing: border-box; padding: 0px 5px;">62</li><li style="box-sizing: border-box; padding: 0px 5px;">63</li><li style="box-sizing: border-box; padding: 0px 5px;">64</li><li style="box-sizing: border-box; padding: 0px 5px;">65</li><li style="box-sizing: border-box; padding: 0px 5px;">66</li><li style="box-sizing: border-box; padding: 0px 5px;">67</li><li style="box-sizing: border-box; padding: 0px 5px;">68</li><li style="box-sizing: border-box; padding: 0px 5px;">69</li><li style="box-sizing: border-box; padding: 0px 5px;">70</li><li style="box-sizing: border-box; padding: 0px 5px;">71</li><li style="box-sizing: border-box; padding: 0px 5px;">72</li><li style="box-sizing: border-box; padding: 0px 5px;">73</li><li style="box-sizing: border-box; padding: 0px 5px;">74</li><li style="box-sizing: border-box; padding: 0px 5px;">75</li><li style="box-sizing: border-box; padding: 0px 5px;">76</li><li style="box-sizing: border-box; padding: 0px 5px;">77</li><li style="box-sizing: border-box; padding: 0px 5px;">78</li><li style="box-sizing: border-box; padding: 0px 5px;">79</li><li style="box-sizing: border-box; padding: 0px 5px;">80</li><li style="box-sizing: border-box; padding: 0px 5px;">81</li><li style="box-sizing: border-box; padding: 0px 5px;">82</li><li style="box-sizing: border-box; padding: 0px 5px;">83</li><li style="box-sizing: border-box; padding: 0px 5px;">84</li><li style="box-sizing: border-box; padding: 0px 5px;">85</li><li style="box-sizing: border-box; padding: 0px 5px;">86</li><li style="box-sizing: border-box; padding: 0px 5px;">87</li><li style="box-sizing: border-box; padding: 0px 5px;">88</li><li style="box-sizing: border-box; padding: 0px 5px;">89</li><li style="box-sizing: border-box; padding: 0px 5px;">90</li><li style="box-sizing: border-box; padding: 0px 5px;">91</li><li style="box-sizing: border-box; padding: 0px 5px;">92</li><li style="box-sizing: border-box; padding: 0px 5px;">93</li><li style="box-sizing: border-box; padding: 0px 5px;">94</li><li style="box-sizing: border-box; padding: 0px 5px;">95</li><li style="box-sizing: border-box; padding: 0px 5px;">96</li><li style="box-sizing: border-box; padding: 0px 5px;">97</li><li style="box-sizing: border-box; padding: 0px 5px;">98</li><li style="box-sizing: border-box; padding: 0px 5px;">99</li><li style="box-sizing: border-box; padding: 0px 5px;">100</li><li style="box-sizing: border-box; padding: 0px 5px;">101</li><li style="box-sizing: border-box; padding: 0px 5px;">102</li><li style="box-sizing: border-box; padding: 0px 5px;">103</li><li style="box-sizing: border-box; padding: 0px 5px;">104</li><li style="box-sizing: border-box; padding: 0px 5px;">105</li><li style="box-sizing: border-box; padding: 0px 5px;">106</li><li style="box-sizing: border-box; padding: 0px 5px;">107</li><li style="box-sizing: border-box; padding: 0px 5px;">108</li><li style="box-sizing: border-box; padding: 0px 5px;">109</li><li style="box-sizing: border-box; padding: 0px 5px;">110</li><li style="box-sizing: border-box; padding: 0px 5px;">111</li><li style="box-sizing: border-box; padding: 0px 5px;">112</li><li style="box-sizing: border-box; padding: 0px 5px;">113</li><li style="box-sizing: border-box; padding: 0px 5px;">114</li><li style="box-sizing: border-box; padding: 0px 5px;">115</li><li style="box-sizing: border-box; padding: 0px 5px;">116</li><li style="box-sizing: border-box; padding: 0px 5px;">117</li><li style="box-sizing: border-box; padding: 0px 5px;">118</li><li style="box-sizing: border-box; padding: 0px 5px;">119</li><li style="box-sizing: border-box; padding: 0px 5px;">120</li><li style="box-sizing: border-box; padding: 0px 5px;">121</li><li style="box-sizing: border-box; padding: 0px 5px;">122</li><li style="box-sizing: border-box; padding: 0px 5px;">123</li><li style="box-sizing: border-box; padding: 0px 5px;">124</li><li style="box-sizing: border-box; padding: 0px 5px;">125</li><li style="box-sizing: border-box; padding: 0px 5px;">126</li><li style="box-sizing: border-box; padding: 0px 5px;">127</li><li style="box-sizing: border-box; padding: 0px 5px;">128</li><li style="box-sizing: border-box; padding: 0px 5px;">129</li><li style="box-sizing: border-box; padding: 0px 5px;">130</li><li style="box-sizing: border-box; padding: 0px 5px;">131</li><li style="box-sizing: border-box; padding: 0px 5px;">132</li><li style="box-sizing: border-box; padding: 0px 5px;">133</li><li style="box-sizing: border-box; padding: 0px 5px;">134</li><li style="box-sizing: border-box; padding: 0px 5px;">135</li><li style="box-sizing: border-box; padding: 0px 5px;">136</li><li style="box-sizing: border-box; padding: 0px 5px;">137</li><li style="box-sizing: border-box; padding: 0px 5px;">138</li><li style="box-sizing: border-box; padding: 0px 5px;">139</li><li style="box-sizing: border-box; padding: 0px 5px;">140</li><li style="box-sizing: border-box; padding: 0px 5px;">141</li><li style="box-sizing: border-box; padding: 0px 5px;">142</li><li style="box-sizing: border-box; padding: 0px 5px;">143</li><li style="box-sizing: border-box; padding: 0px 5px;">144</li><li style="box-sizing: border-box; padding: 0px 5px;">145</li><li style="box-sizing: border-box; padding: 0px 5px;">146</li><li style="box-sizing: border-box; padding: 0px 5px;">147</li><li style="box-sizing: border-box; padding: 0px 5px;">148</li><li style="box-sizing: border-box; padding: 0px 5px;">149</li><li style="box-sizing: border-box; padding: 0px 5px;">150</li><li style="box-sizing: border-box; padding: 0px 5px;">151</li><li style="box-sizing: border-box; padding: 0px 5px;">152</li><li style="box-sizing: border-box; padding: 0px 5px;">153</li><li style="box-sizing: border-box; padding: 0px 5px;">154</li><li style="box-sizing: border-box; padding: 0px 5px;">155</li><li style="box-sizing: border-box; padding: 0px 5px;">156</li><li style="box-sizing: border-box; padding: 0px 5px;">157</li><li style="box-sizing: border-box; padding: 0px 5px;">158</li><li style="box-sizing: border-box; padding: 0px 5px;">159</li><li style="box-sizing: border-box; padding: 0px 5px;">160</li><li style="box-sizing: border-box; padding: 0px 5px;">161</li><li style="box-sizing: border-box; padding: 0px 5px;">162</li><li style="box-sizing: border-box; padding: 0px 5px;">163</li><li style="box-sizing: border-box; padding: 0px 5px;">164</li><li style="box-sizing: border-box; padding: 0px 5px;">165</li><li style="box-sizing: border-box; padding: 0px 5px;">166</li><li style="box-sizing: border-box; padding: 0px 5px;">167</li><li style="box-sizing: border-box; padding: 0px 5px;">168</li><li style="box-sizing: border-box; padding: 0px 5px;">169</li><li style="box-sizing: border-box; padding: 0px 5px;">170</li><li style="box-sizing: border-box; padding: 0px 5px;">171</li><li style="box-sizing: border-box; padding: 0px 5px;">172</li><li style="box-sizing: border-box; padding: 0px 5px;">173</li><li style="box-sizing: border-box; padding: 0px 5px;">174</li><li style="box-sizing: border-box; padding: 0px 5px;">175</li><li style="box-sizing: border-box; padding: 0px 5px;">176</li><li style="box-sizing: border-box; padding: 0px 5px;">177</li><li style="box-sizing: border-box; padding: 0px 5px;">178</li><li style="box-sizing: border-box; padding: 0px 5px;">179</li><li style="box-sizing: border-box; padding: 0px 5px;">180</li><li style="box-sizing: border-box; padding: 0px 5px;">181</li><li style="box-sizing: border-box; padding: 0px 5px;">182</li><li style="box-sizing: border-box; padding: 0px 5px;">183</li><li style="box-sizing: border-box; padding: 0px 5px;">184</li><li style="box-sizing: border-box; padding: 0px 5px;">185</li><li style="box-sizing: border-box; padding: 0px 5px;">186</li><li style="box-sizing: border-box; padding: 0px 5px;">187</li><li style="box-sizing: border-box; padding: 0px 5px;">188</li><li style="box-sizing: border-box; padding: 0px 5px;">189</li><li style="box-sizing: border-box; padding: 0px 5px;">190</li><li style="box-sizing: border-box; padding: 0px 5px;">191</li><li style="box-sizing: border-box; padding: 0px 5px;">192</li><li style="box-sizing: border-box; padding: 0px 5px;">193</li><li style="box-sizing: border-box; padding: 0px 5px;">194</li><li style="box-sizing: border-box; padding: 0px 5px;">195</li><li style="box-sizing: border-box; padding: 0px 5px;">196</li><li style="box-sizing: border-box; padding: 0px 5px;">197</li><li style="box-sizing: border-box; padding: 0px 5px;">198</li><li style="box-sizing: border-box; padding: 0px 5px;">199</li><li style="box-sizing: border-box; padding: 0px 5px;">200</li><li style="box-sizing: border-box; padding: 0px 5px;">201</li><li style="box-sizing: border-box; padding: 0px 5px;">202</li><li style="box-sizing: border-box; padding: 0px 5px;">203</li><li style="box-sizing: border-box; padding: 0px 5px;">204</li><li style="box-sizing: border-box; padding: 0px 5px;">205</li><li style="box-sizing: border-box; padding: 0px 5px;">206</li><li style="box-sizing: border-box; padding: 0px 5px;">207</li><li style="box-sizing: border-box; padding: 0px 5px;">208</li><li style="box-sizing: border-box; padding: 0px 5px;">209</li><li style="box-sizing: border-box; padding: 0px 5px;">210</li><li style="box-sizing: border-box; padding: 0px 5px;">211</li><li style="box-sizing: border-box; padding: 0px 5px;">212</li><li style="box-sizing: border-box; padding: 0px 5px;">213</li><li style="box-sizing: border-box; padding: 0px 5px;">214</li><li style="box-sizing: border-box; padding: 0px 5px;">215</li><li style="box-sizing: border-box; padding: 0px 5px;">216</li><li style="box-sizing: border-box; padding: 0px 5px;">217</li><li style="box-sizing: border-box; padding: 0px 5px;">218</li><li style="box-sizing: border-box; padding: 0px 5px;">219</li><li style="box-sizing: border-box; padding: 0px 5px;">220</li><li style="box-sizing: border-box; padding: 0px 5px;">221</li><li style="box-sizing: border-box; padding: 0px 5px;">222</li><li style="box-sizing: border-box; padding: 0px 5px;">223</li><li style="box-sizing: border-box; padding: 0px 5px;">224</li><li style="box-sizing: border-box; padding: 0px 5px;">225</li><li style="box-sizing: border-box; padding: 0px 5px;">226</li><li style="box-sizing: border-box; padding: 0px 5px;">227</li><li style="box-sizing: border-box; padding: 0px 5px;">228</li><li style="box-sizing: border-box; padding: 0px 5px;">229</li><li style="box-sizing: border-box; padding: 0px 5px;">230</li><li style="box-sizing: border-box; padding: 0px 5px;">231</li><li style="box-sizing: border-box; padding: 0px 5px;">232</li><li style="box-sizing: border-box; padding: 0px 5px;">233</li><li style="box-sizing: border-box; padding: 0px 5px;">234</li><li style="box-sizing: border-box; padding: 0px 5px;">235</li><li style="box-sizing: border-box; padding: 0px 5px;">236</li><li style="box-sizing: border-box; padding: 0px 5px;">237</li><li style="box-sizing: border-box; padding: 0px 5px;">238</li><li style="box-sizing: border-box; padding: 0px 5px;">239</li><li style="box-sizing: border-box; padding: 0px 5px;">240</li><li style="box-sizing: border-box; padding: 0px 5px;">241</li><li style="box-sizing: border-box; padding: 0px 5px;">242</li><li style="box-sizing: border-box; padding: 0px 5px;">243</li><li style="box-sizing: border-box; padding: 0px 5px;">244</li><li style="box-sizing: border-box; padding: 0px 5px;">245</li><li style="box-sizing: border-box; padding: 0px 5px;">246</li><li style="box-sizing: border-box; padding: 0px 5px;">247</li><li style="box-sizing: border-box; padding: 0px 5px;">248</li><li style="box-sizing: border-box; padding: 0px 5px;">249</li><li style="box-sizing: border-box; padding: 0px 5px;">250</li><li style="box-sizing: border-box; padding: 0px 5px;">251</li><li style="box-sizing: border-box; padding: 0px 5px;">252</li><li style="box-sizing: border-box; padding: 0px 5px;">253</li><li style="box-sizing: border-box; padding: 0px 5px;">254</li><li style="box-sizing: border-box; padding: 0px 5px;">255</li><li style="box-sizing: border-box; padding: 0px 5px;">256</li><li style="box-sizing: border-box; padding: 0px 5px;">257</li><li style="box-sizing: border-box; padding: 0px 5px;">258</li><li style="box-sizing: border-box; padding: 0px 5px;">259</li><li style="box-sizing: border-box; padding: 0px 5px;">260</li><li style="box-sizing: border-box; padding: 0px 5px;">261</li><li style="box-sizing: border-box; padding: 0px 5px;">262</li><li style="box-sizing: border-box; padding: 0px 5px;">263</li><li style="box-sizing: border-box; padding: 0px 5px;">264</li><li style="box-sizing: border-box; padding: 0px 5px;">265</li><li style="box-sizing: border-box; padding: 0px 5px;">266</li><li style="box-sizing: border-box; padding: 0px 5px;">267</li><li style="box-sizing: border-box; padding: 0px 5px;">268</li><li style="box-sizing: border-box; padding: 0px 5px;">269</li><li style="box-sizing: border-box; padding: 0px 5px;">270</li><li style="box-sizing: border-box; padding: 0px 5px;">271</li><li style="box-sizing: border-box; padding: 0px 5px;">272</li><li style="box-sizing: border-box; padding: 0px 5px;">273</li><li style="box-sizing: border-box; padding: 0px 5px;">274</li><li style="box-sizing: border-box; padding: 0px 5px;">275</li><li style="box-sizing: border-box; padding: 0px 5px;">276</li><li style="box-sizing: border-box; padding: 0px 5px;">277</li><li style="box-sizing: border-box; padding: 0px 5px;">278</li><li style="box-sizing: border-box; padding: 0px 5px;">279</li><li style="box-sizing: border-box; padding: 0px 5px;">280</li><li style="box-sizing: border-box; padding: 0px 5px;">281</li><li style="box-sizing: border-box; padding: 0px 5px;">282</li><li style="box-sizing: border-box; padding: 0px 5px;">283</li><li style="box-sizing: border-box; padding: 0px 5px;">284</li><li style="box-sizing: border-box; padding: 0px 5px;">285</li><li style="box-sizing: border-box; padding: 0px 5px;">286</li><li style="box-sizing: border-box; padding: 0px 5px;">287</li><li style="box-sizing: border-box; padding: 0px 5px;">288</li><li style="box-sizing: border-box; padding: 0px 5px;">289</li><li style="box-sizing: border-box; padding: 0px 5px;">290</li><li style="box-sizing: border-box; padding: 0px 5px;">291</li><li style="box-sizing: border-box; padding: 0px 5px;">292</li><li style="box-sizing: border-box; padding: 0px 5px;">293</li><li style="box-sizing: border-box; padding: 0px 5px;">294</li><li style="box-sizing: border-box; padding: 0px 5px;">295</li><li style="box-sizing: border-box; padding: 0px 5px;">296</li><li style="box-sizing: border-box; padding: 0px 5px;">297</li><li style="box-sizing: border-box; padding: 0px 5px;">298</li><li style="box-sizing: border-box; padding: 0px 5px;">299</li><li style="box-sizing: border-box; padding: 0px 5px;">300</li><li style="box-sizing: border-box; padding: 0px 5px;">301</li><li style="box-sizing: border-box; padding: 0px 5px;">302</li><li style="box-sizing: border-box; padding: 0px 5px;">303</li><li style="box-sizing: border-box; padding: 0px 5px;">304</li><li style="box-sizing: border-box; padding: 0px 5px;">305</li><li style="box-sizing: border-box; padding: 0px 5px;">306</li><li style="box-sizing: border-box; padding: 0px 5px;">307</li><li style="box-sizing: border-box; padding: 0px 5px;">308</li><li style="box-sizing: border-box; padding: 0px 5px;">309</li><li style="box-sizing: border-box; padding: 0px 5px;">310</li><li style="box-sizing: border-box; padding: 0px 5px;">311</li><li style="box-sizing: border-box; padding: 0px 5px;">312</li><li style="box-sizing: border-box; padding: 0px 5px;">313</li><li style="box-sizing: border-box; padding: 0px 5px;">314</li><li style="box-sizing: border-box; padding: 0px 5px;">315</li><li style="box-sizing: border-box; padding: 0px 5px;">316</li><li style="box-sizing: border-box; padding: 0px 5px;">317</li><li style="box-sizing: border-box; padding: 0px 5px;">318</li><li style="box-sizing: border-box; padding: 0px 5px;">319</li><li style="box-sizing: border-box; padding: 0px 5px;">320</li><li style="box-sizing: border-box; padding: 0px 5px;">321</li><li style="box-sizing: border-box; padding: 0px 5px;">322</li><li style="box-sizing: border-box; padding: 0px 5px;">323</li><li style="box-sizing: border-box; padding: 0px 5px;">324</li><li style="box-sizing: border-box; padding: 0px 5px;">325</li><li style="box-sizing: border-box; padding: 0px 5px;">326</li><li style="box-sizing: border-box; padding: 0px 5px;">327</li><li style="box-sizing: border-box; padding: 0px 5px;">328</li><li style="box-sizing: border-box; padding: 0px 5px;">329</li><li style="box-sizing: border-box; padding: 0px 5px;">330</li><li style="box-sizing: border-box; padding: 0px 5px;">331</li><li style="box-sizing: border-box; padding: 0px 5px;">332</li><li style="box-sizing: border-box; padding: 0px 5px;">333</li><li style="box-sizing: border-box; padding: 0px 5px;">334</li><li style="box-sizing: border-box; padding: 0px 5px;">335</li><li style="box-sizing: border-box; padding: 0px 5px;">336</li></ul>

七、文件上传 
在Windows下将程序编写好之后,使用filezilla软件将“GetConfig.c”代码文件和“Config.ini”配置文件上传到“/home/zhou/zhouzx/GetConfig”目录下。

八、文件编译及运行结果 
使用SecureCRT软件登录到Linux下,转到“/home/zhou/zhouzx/GetConfig”目录下,执行“gcc -g -o GetConfig GetConfig.c”命令,生成“GetConfig”。然后再执行“GetConfig”命令,程序运行结果如下:

<code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">~/zhouzx/GetConfig> gcc -g -o GetConfig GetConfig.c
~/zhouzx/GetConfig> GetConfig
EmployeeName <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">is</span> wang, EmployeeAge <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">is</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">25</span>
EmployerName <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">is</span> zhou, EmployerAge <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">is</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">38</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>

九、总结 
本文对Linux下配置文件读取操作的整个流程进行了详细的介绍,并给出了实现该操作的C代码。程序中的GetConfigFileStringValue和GetConfigFileIntValue函数可作为API供其它需要读取配置文件的程序调用。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值