linux读取配置文件(C语言版)
来源:互联网 发布:差不多先生知乎 编辑:程序博客网 时间:2024/04/30 03:45
http://www.cnblogs.com/bo083/archive/2012/11/19/2777076.html
linux读取配置文件(C语言版)
一个通用的linux系统中C语言版读取配置文件的函数。
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
#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);
}
void
main()
{
char
ip[16];
GetProfileString(
"./cls.conf"
,
"cls_server"
,
"ip"
, ip);
printf
(
"%s\n"
,ip);
}
配置文件例子如下:
1
2
3
[cls_server]
#配置文件等号左右可以有空格也可以没有
ip=192.16.31.2
0 0
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux c读取配置文件
- linux c 读取配置文件
- 读写配置文件--C语言版
- 读取配置文件源代码[linux c]
- linux c 使用libxml2读取配置文件
- linux编程(C语言读取配置文件)
- Linux下用C读取INI配置文件
- 关于验证码
- iOS5系统API和5个开源库的JSON解析速度测试
- xcode6编译cocos2dx项目出现Undefined symbols _fwrite$UNIX2003
- 远程网络拍照
- 浅析模切ERP对当代模切行业的深远影响
- linux读取配置文件(C语言版)
- 一篇很全面的freemarker教程
- IntelliJ IDEA 12创建Maven管理的Java Web项目
- linux 创建多级目录 mkdir -p
- HTML5 drawImage 使用问题
- VC项目文件说明
- 码头管理信息化新应用
- QML工程创建
- try-catch-finally