一、概述
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供其它需要读取配置文件的程序调用。