C语言读取INI配置文件 (Linux可用)
Linux平台下C语言读取配置文件,Linux如何读取配置文件。c语言实现,可在linux平台上用了,在Windows下可以用GetPrivateProfileString或GetPrivateProfileInt方便读取.ini配置文件内容,但是在Linux平台上就一筹莫展了。为了解决该问题,打算用C来读取.ini,即可不受平台的限制了。
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
#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/C++程序员之家 分享一些源代码 原文链接:http://blog.csdn.net/lxh1230119/article/details/7781333/