/*c语言实现,可在linux平台上用了,在Windows下可以用GetPrivateProfileString或GetPrivateProfileInt方便读取.ini配置文件内容,但是在Linux平台上就一筹莫展了。为了解决该问题,打算用C来读取.ini,即可不受平台的限制了*/
#define CONF_FILE_PATH  "Config.ini"
#include <string.h>
#ifdef WIN32
#include <Windows.h>
#include <stdio.h>
#else
#define  MAX_PATH 260
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#endif
char g_szConfigPath[MAX_PATH];
//获取当前程序目录
int GetCurrentPath(char buf[],char *pFileName)
{
#ifdef WIN32
GetModuleFileName(NULL,buf,MAX_PATH);
#else
char pidfile[64];
int bytes;
int fd;
sprintf(pidfile, "/proc/%d/cmdline", getpid());
fd = open(pidfile, O_RDONLY, 0);
bytes = read(fd, buf, 256);
close(fd);
buf[MAX_PATH] = '\0';
#endif
char * p = &buf[strlen(buf)];
do
{
*p = '\0';
p--;
#ifdef WIN32
} while( '\\' != *p );
#else
} while( '/' != *p );
#endif
p++;
//配置文件目录
memcpy(p,pFileName,strlen(pFileName));
return 0;
}
//从INI文件读取字符串类型数据
char *GetIniKeyString(char *title,char *key,char *filename)
{
FILE *fp;
char szLine[1024];
static char tmpstr[1024];
int rtnval;
int i = 0;
int flag = 0;
char *tmp;
if((fp = fopen(filename, "r")) == NULL)
{
printf("have   no   such   file \n");
return "";
}
while(!feof(fp))
{
rtnval = fgetc(fp);
if(rtnval == EOF)
{
break;
}
else
{
szLine[i++] = rtnval;
}
if(rtnval == '\n')
{
#ifndef WIN32
i--;
#endif
szLine[--i] = '\0';
i = 0;
tmp = strchr(szLine, '=');
if(( tmp != NULL )&&(flag == 1))
{
if(strstr(szLine,key)!=NULL)
{
//注释行
if ('#' == szLine[0])
{
}
else if ( '/' == szLine[0] && '/' == szLine[1] )
{
}
else
{
//找打key对应变量
strcpy(tmpstr,tmp+1);
fclose(fp);
return tmpstr;
}
}
}
else
{
strcpy(tmpstr,"[");
strcat(tmpstr,title);
strcat(tmpstr,"]");
if( strncmp(tmpstr,szLine,strlen(tmpstr)) == 0 )
{
//找到title
flag = 1;
}
}
}
}
fclose(fp);
return "";
}
//从INI文件读取整类型数据
int GetIniKeyInt(char *title,char *key,char *filename)
{
return atoi(GetIniKeyString(title,key,filename));
}
int main(int argc, char* argv[])
{
char buf[MAX_PATH];
memset(buf,0,sizeof(buf));
GetCurrentPath(buf,CONF_FILE_PATH);
strcpy(g_szConfigPath,buf);
int iCatAge;
char szCatName[32];
iCatAge = GetIniKeyInt("CAT","age",g_szConfigPath);
char *a = GetIniKeyString("CAT","name",g_szConfigPath);
printf("%d\r\n",iCatAge);
printf("%s\r\n",a);
return 0;
}

用C读取INI配置文件 (可在linux平台上用)相关推荐

  1. java inireader_java读取配置文件 Java中如何设置读取ini配置文件?

    Java读取配置文件的几种方法以及路径问题看透,心静,锁份幽静,将自己填埋在那里,任窗外灯红酒绿,草长莺飞,让那颗疲惫的心,静静地栖息在流水盈盈里,抛却尘世累累. java 怎么读取web jar中的 ...

  2. c#读取ini配置文件、将配置数据保存至ini文件

    全栈工程师开发手册 (作者:栾鹏) c#教程全解 c#读取ini配置文件.将配置数据保存至ini文件 测试代码 static void Main() {string value = readini(& ...

  3. python configparser 数组_python读取ini配置文件,python中数组如何表示

    python读取ini配置文件 Python必须使用configparser包来读取ini配置,因此首先加载它. 导入configparser后,我们需要加载配置文件. config=configpa ...

  4. linux架构接口层教程,在LINUX平台上进行成功实现RIL层功能和框架层应用

    1.课题研究的背景和意义 1.1 Android RIL简介 Android RIL(Radio Interface Layer)提供了无线基带Modem与电话应用之间的抽象层.在Android RI ...

  5. MySQL在Windows和Linux平台上多版本多实例安装配置方法(5.5、5.6、5.7、8.0)

    MySQL在Windows和Linux平台上多版本多实例安装配置方法(5.5.5.6.5.7.8.0) Linux下MySQL 5.5.5.6和5.7的RPM.二进制和源码安装 参考: http:// ...

  6. linux 安装邮件系统,在Linux平台上安装基于Postfix、Courier-imap、Extmail的邮件系统 V 0...

    很久之前就计划写一个Postfix在Linux平台上面的安装文档,把自己安装Postfix的过程总结一下,但由于工作的关系直到现在才动手.和个人的习惯有关,在安装过程中我使用了很多源代码,这对一个新手 ...

  7. 【DG】在Linux平台上搭建单实例的dataguard--duplicate

    [DG]在Linux平台上搭建单实例的dataguard--duplicate 一 : 实验环境介绍 *** 鉴于生产环境均采用 64 位系统和数据库软件,本实验也将采用这个标准 *** 采用vmwa ...

  8. GNU/Linux平台上正则表达式的简单使用

    友情提醒:本博文涉及的内容中涉及到的系统实践操作在Centos6.5上实现,GNU/Linux简称为linux,GNU/grep简称为grep,GNU/sed简称为sed,GNU/gawk简称为awk ...

  9. 如何在linux上创建数据库,在LINUX平台上手动创建数据库(oracle 10g)

    在LINUX平台上手动创建数据库(oracle 10g) 安装完oracle软件后,不使用dbca创建数据库,而手动创建数据库,主要目的是了解数据库创建的过程中主要进行了那些操作. 1.首先设置要创建 ...

最新文章

  1. Python 的编码问题UnicodeDecodeError: 'ascii' codec can't decode byte ××× in postition
  2. 12.多线程的实现方式、线程安全问题的产生与解决以及生产者与消费者问题
  3. 第3章 StringBuilder类
  4. 清华大学图神经网络综述:模型与应用
  5. 成功解决AttributeError: module tensorflow has no attribute placeholder
  6. 美团Android DEX自动拆包及动态加载简介
  7. Qt Creator使用Clang工具
  8. SOAP/Web Service/WSDL关系
  9. 提升你的代码——Lambda!
  10. 2017西安交大ACM小学期数据结构 [树状数组 离散化]
  11. jQuery 操作元素
  12. java中自定义输入数字格式_Java 创建并使用自定义数字格式、35;###、####.#####和语言环境...
  13. 二十四种设计模式:策略模式(Strategy Pattern)
  14. 彻底解决_OBJC_CLASS_$_某文件名“, referenced from:问题(转)
  15. php 上标,PHP数组上标类型陷阱
  16. 05.第六章、进度管理
  17. 来了!全球三个首次5G技术实现; 辽宁省完成5G投资36.4亿元; 中兴发布白皮书; 7月国内5G手机出货1391.1万...
  18. 用MapReduce统计微博的粉丝数,加上博主的昵称
  19. linux下定时清理日志任务
  20. 如何用银联易办事POS机缴纳交通违章罚款

热门文章

  1. laravel order 按时间升序_Cache and Related Part3: Coherence amp; Order
  2. python交互式解释器下载_Python解释器
  3. LOL服务器维护打排位算吗,LOL:请停止你的排位行为,这是连败前的征兆!再玩就会一直掉分...
  4. 面试官通过21天步数考察候选人诚意,结果拒了清华生收了三本生
  5. html img设置最底层,在HTML片段中设置img标签的baseUrl
  6. acl 允许同网段访问_ENSP模拟交换环境中调用高级ACL限制不同网段之间互访
  7. matplotlib绘图_Python之matplotlib绘图示例
  8. python输出文本内容_python如何输出文件内容
  9. c语言单词的一个字母变换,c语言:输入一行英文字符串,把每个单词第一个字母变为大写,输出修改后的字符串知道...
  10. popup弹出html页面,在页面加载时打开所有弹出窗口popup.html