linux下读取简单文本配置文件C程序

//读取配置文件代码readcfg.c

#include <stdio.h>

#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <errno.h>
 
#define KEYVALLEN 100
 
/*   删除左边的空格   */
char * l_trim(char * szOutput, const char *szInput)
{
assert(szInput != NULL);
assert(szOutput != NULL);
assert(szOutput != szInput);
for   (NULL; *szInput != '\0' && isspace(*szInput); ++szInput)
{
;
}
return strcpy(szOutput, szInput);
}
 
/*   删除右边的空格   */
char *r_trim(char *szOutput, const char *szInput)
{
char *p = NULL;
assert(szInput != NULL);
assert(szOutput != NULL);
assert(szOutput != szInput);
strcpy(szOutput, szInput);
for(p = szOutput + strlen(szOutput) - 1; p >= szOutput && isspace(*p); --p)
{
;
}
*(++p) = '\0';
return szOutput;
}
 
/*   删除两边的空格   */
char * a_trim(char * szOutput, const char * szInput)
{
char *p = NULL;
assert(szInput != NULL);
assert(szOutput != NULL);
l_trim(szOutput, szInput);
for   (p = szOutput + strlen(szOutput) - 1;p >= szOutput && isspace(*p); --p)
{
;
}
*(++p) = '\0';
return szOutput;
}
 
/*读取配置文件函数*/
int GetProfileString(char *profile, char *AppName, char *KeyName, char *KeyVal )
{
char appname[32],keyname[32];
char *buf,*c;
char buf_i[KEYVALLEN], buf_o[KEYVALLEN];
FILE *fp;
int found=0; /* 1 AppName 2 KeyName */

if( (fp=fopen( profile,"r" ))==NULL )
{
printf( "openfile [%s] error [%s]\n",profile,strerror(errno) );
return(-1);
}
fseek( fp, 0, SEEK_SET );
memset( appname, 0, sizeof(appname) );
sprintf( appname,"[%s]", AppName );


while( !feof(fp) && fgets( buf_i, KEYVALLEN, fp )!=NULL )
{
l_trim(buf_o, buf_i);
if( strlen(buf_o) <= 0 )
continue;
buf = NULL;
buf = buf_o;


if( found == 0 )
{
if( buf[0] != '[' ) 
{
continue;

else if ( strncmp(buf,appname,strlen(appname))==0 )
{
found = 1;
continue;
}



else if( found == 1 )
{
if( buf[0] == '#' )
{
continue;

else if ( buf[0] == '[' ) 
{
break;

else 
{
if( (c = (char*)strchr(buf, '=')) == NULL )
continue;
memset( keyname, 0, sizeof(keyname) );


sscanf( buf, "%[^=|^ |^\t]", keyname );
if( strcmp(keyname, KeyName) == 0 )
{
sscanf( ++c, "%[^\n]", KeyVal );
char *KeyVal_o = (char *)malloc(strlen(KeyVal) + 1);
if(KeyVal_o != NULL)
{
memset(KeyVal_o, 0, sizeof(KeyVal_o));
a_trim(KeyVal_o, KeyVal);
if(KeyVal_o && strlen(KeyVal_o) > 0)
{
strcpy(KeyVal, KeyVal_o);
}
free(KeyVal_o);
KeyVal_o = NULL;
}
found = 2;
break;

else 
{
continue;
}
}
}
}
fclose( fp );

if( found == 2 )
return(0);
else
return(-1);
}
 
int main()
{
char ip[32] = {0};
GetProfileString("./cfg.ini", "cls_server", "ip", ip);
printf("%s\n",ip);
memset(ip, 0, sizeof(ip));
GetProfileString("./cfg.ini", "User_Info", "user_name", ip);

printf("%s\n",ip);memset(ip, 0, sizeof(ip));
GetProfileString("./cfg.ini", "User_Info", "user_passwd", ip);

printf("%s\n",ip);memset(ip, 0, sizeof(ip));
GetProfileString("./cfg.ini", "Channel_Info", "channel_num", ip);

printf("%s\n",ip);memset(ip, 0, sizeof(ip));
return 0;

}


配置文件cfg.ini

[cls_server]
#配置文件等号左右可以有空格也可以没有
ip=192.16.31.2
[User_Info]
user_name=tanqw
user_passwd=1234567890
[Channel_Info]
channel_num=72

Linux 中,读取配置文件通常使用以下步骤: 1. 打开配置文件:使用文件操作函数(如 fopen)打开要读取配置文件配置文件通常位于文本格式,可以使用文本编辑器打开。 2. 读取配置项:使用文件操作函数(如 fgets 或 getline)逐行读取配置文件内容。可以根据需要使用字符串处理函数(如 strtok 或 sscanf)解析每行的配置项。 3. 处理配置项:根据配置文件的格式和内容,将读取到的配置项进行相应的处理。例如,可以将配置项的键值对存储到变量中,或者执行相应的操作。 4. 关闭配置文件:使用文件操作函数(如 fclose)关闭已打开的配置文件,释放资源。 以下是一个简单的示例代码,用于演示如何读取一个名为 "config.txt" 的配置文件: ```c #include <stdio.h> int main() { FILE *file = fopen("config.txt", "r"); if (file == NULL) { perror("Failed to open config file"); return 1; } char line[256]; while (fgets(line, sizeof(line), file)) { // 处理每行配置项 // 例如,可以使用 strtok 函数解析键值对 char *key = strtok(line, "="); char *value = strtok(NULL, "="); if (key && value) { printf("Key: %s, Value: %s\n", key, value); } } fclose(file); return 0; } ``` 在上述示例中,我们打开了一个名为 "config.txt" 的配置文件,并逐行读取其中的配置项。使用 strtok 函数将每行的键值对分隔开来,并进行处理。最后关闭配置文件。 请注意,这只是一个简单的示例,实际的配置文件读取可能涉及更复杂的逻辑和错误处理。具体的实现方式可能因编程语言和需求而有所不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值