libfastcommon/doc/ini_file_reader-Chinese.md

123 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

## libfastcommon概述
```
libfastcommon是在github开源的⼀个C函数库。它提供了ini⽂件解析、logger、
64位唯⼀整数⽣成器、字符串处理、socket封装、对象池、skiplist、
定时任务调度器、时间轮等等。接下来主要介绍下ini⽂件解析ini_file_reader。
```
## ini_file_reader的主要特点
### 1、⽀持section
```
例如: [workers]
```
### 2、⼀个配置项可以出现多次
```
通过iniGetValues或者iniGetValuesEx获取。例如
tracker_server = ip1
tracker_server = ip2
```
### 3、 #include指令包含其他配置⽂件
```
可以包含本地⽂件也可以包含URL目前仅⽀持HTTP。例如
#include http.conf
```
### 4、 #@function指令⽀持标注
```
配置项的取值为扩展(外部)动态库的返回值
V1.39⽀持三个内置标注:
I. LOCAL_IP_GET [inner | private | outer | public] 获取本机IP地址
inner或private表示获取内网IPouter或public表示获取外网IP
[index]表示获取指定序号的本机IP0表示获取第一个IP-1表示获取最后一个IP
例如:[0]、inner[-1], outer[1]等等
II. SHELL_EXEC 获取命令⾏输出执行的command为配置项
III. REPLACE_VARS 替换配置项中%{VARIABLE}格式的变量,变量由#@set指令设置
```
```
配置⽰例:
#@function SHELL_EXEC
host = hostname
#@function LOCAL_IP_GET
bind_ip = inner
#@set encoder_filename=/usr/local/etc/encoder.conf
#@set encoder_port = $(grep ^inner_port %{encoder_filename} | awk -F '=' '{print $2;}')
#@function REPLACE_VARS
check_alive_command = /usr/local/lib/libdfscheckalive.so %{encoder_port} 2 30
```
### 5、 #@add_annotation 扩展#@function标签
```
格式:
#@add_annotation <function标签> <动态库文件名> [参数1, 参数2, ...]
参数个数0到3个。
使用libshmcache扩展标签CONFIG_GET示例
#@add_annotation CONFIG_GET /usr/lib/libshmcache.so /etc/libshmcache.conf
#@function CONFIG_GET
app.version = app1.key1
```
### 6、⽀持简单的流程控制控制标签包括
#### I. 条件判断
```
#@if %{VARIABLE} in [x,y,..]
#@else
#@endif
其中#@else指令为可选项。
#@if指令目前仅⽀持这种格式。
VARIABLE包括
1 LOCAL_IP本机IP
2 LOCAL_HOST通过hostname获得的本机主机名
3 #@set指令设置的变量 #@set指令格式
#@set VAR = value
若要获取shell命令⾏输出 value部分格式为 $(command),例如:
#@set os_name = $(uname -a | awk '{print $1;}')
注: LOCAL_IP⽀持CIDR格式的IP地址例如 172.16.12.0/22
例如:
#@if %{LOCAL_IP} in [10.0.11.89,10.0.11.99,172.16.12.0/22]
min_subprocess_number = 4
#@else
min_subprocess_number = 20
#@endif
```
#### II. 计数循环
```
#@for VARIABLE from 0 to 15 step 1
#@endfor
其中VARIABLE⻓度不超过64位字符在循环体中通过
{$VARIABLE}格式获取其值。 step可以为负数但不能为0。例如
#@for i from 0 to 15 step 1
[section{$i}]
subprocess_command = /usr/bin/php xxx {$i}
subprocess_number = 1
#@endfor
```
```
另外, libfastcommon中的部分函数提供了PHP扩展。 github地址
https://github.com/happyfish100/libfastcommon欢迎⼤家下载使⽤。
```