peercast.ini的格式如下
[Server]
serverPort = 7144
autoServe = Yes
forceIP =
isRoot = No
maxBitrateOut = 0
maxRelays = 2
maxDirect = 0
IniFile类定义三个字符串变量,currLine,nameStr,valueStr
currentLine对应INI文件中的一行,例如serverPort = 7144
nameStr对应相应的变量名,例如serverPort
valueStr对应相应的变量值,例如7144
写入INI文件时根据写入变量值的不同提供几种写入方法:
writeSection(const char *name)写入段,例如writeSection( "Server" )则写入[Server]
writeIntValue(const char *name, int iv)写入整型变量,writeIntValue( serverPort, 7144 ),则写入
serverPort = 7144,其他类似方法还有writeStrValue,writeBoolValue,writeLine等
读取INI文件时,readNext()每次读取INI文件中的一行到currLine中,并把相应的变量名和变量值读取到nameStr和valueStr中
getName()返回变量名,根据变量值类型的不同相应有getIntValue,getStrValue,getBoolValue
这里用loadSettings的部分代码解释一下读取配置文件的过程
void ServMgr::loadSettings(const char *fn)
{
IniFile iniFile;
if (!iniFile.openReadOnly(fn))
saveSettings(fn);
if (iniFile.openReadOnly(fn))
{
while (iniFile.readNext())
{
// server settings
if (iniFile.isName("serverPort"))
servMgr->serverHost.port = iniFile.getIntValue();
else if (iniFile.isName("autoServe"))
servMgr->autoServe = iniFile.getBoolValue();
else if (iniFile.isName("autoConnect"))
servMgr->autoConnect = iniFile.getBoolValue();
else if (iniFile.isName("icyPassword")) // depreciated
strcpy(servMgr->password,iniFile.getStrValue());
else if (iniFile.isName("forceIP"))
servMgr->forceIP = iniFile.getStrValue();
也就是用readNext()逐行读取并用IF ELSE语句判断是否是要读的变量,直至读到文件末尾为止
本文分析了IniFile.h源文件,重点介绍了如何处理peercast.ini配置文件。 IniFile类包含currLine, nameStr, valueStr变量,用于存储文件中的行、变量名和值。提供了writeSection、writeIntValue等方法用于写入配置,以及readNext、getName、getIntValue等方法用于读取。在ServMgr::loadSettings中展示了读取配置文件的流程,通过readNext逐行读取并判断变量,从而获取所需设置。"
121496731,11239076,理解I/O的同步、异步、阻塞与非阻塞,"['java', 'linux', '并发编程', '操作系统', 'I/O处理']
423

被折叠的 条评论
为什么被折叠?



