Linux下用C讀取INI配置檔案
【原文:http://www.linuxidc.com/Linux/2011-12/49100.htm】
在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);
strcpy(szCatName,GetIniKeyString("CAT","name",g_szConfigPath));
return 0;
}
下邊是配置檔案:
[CAT]
age=2
name=Tom
相關文章
- C#讀取ini配置檔案C#
- go 讀取.ini配置檔案Go
- C#中讀寫INI配置檔案C#
- linux/windows 讀寫ini配置檔案LinuxWindows
- 透過python讀取ini配置檔案Python
- 建立與讀取.ini檔案
- delphi讀取ini檔案 (轉)
- java 讀寫 ini 配置檔案Java
- Python讀取修改ini配置檔案[ConfigParser]Python
- c#讀寫ini檔案C#
- 使用C#讀寫ini檔案C#
- pyinstaller 打包後讀取 ini 配置檔案路徑錯誤,怎麼定位配置檔案
- C#關於讀寫INI檔案C#
- C# winform中讀寫ini檔案C#ORM
- C#讀取Json配置檔案C#JSON
- 使用IniEditor讀寫INI型別配置檔案型別
- C#讀取指定json配置檔案C#JSON
- viper 讀取配置檔案
- go配置檔案讀取Go
- IOC - 讀取配置檔案
- NPM酷庫047:ini,解析INI配置檔案NPM
- 用C#讀取txt檔案的方法C#
- mysql--my.ini配置檔案配置MySql
- VB讀寫ini檔案 (轉)
- 【自動化測試】Python 讀取 .ini 格式檔案Python
- java中讀取配置檔案Java
- Mysql 配置檔案 my.iniMySql
- MySQL檔案my.ini配置MySql
- C#讀取被程式佔用的檔案C#
- C#讀取Xml檔案C#XML
- winform c#寫ini檔案ORMC#
- c/c++、matlab讀取資料夾下的檔案C++Matlab
- Golang專案中讀取配置檔案Golang
- C/C++讀取SEGY檔案(三)C++
- VB.NET 讀寫ini檔案
- 6.1檔案下載、讀取
- IIS不能下載ini檔案
- shell讀取配置檔案-sed命令