分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
Clamav杀毒软件源码分析笔记[三]
刺猬@http://blog.csdn.net/littlehedgehog
[获取配置文件信息]
说来比较打击积极性的是我们还得做一番比较麻烦的但是却又没多少挑战性的事业,因为如果clamd这个服务端全部都用命令行来指定信息的话,Clamav估计会没有市场,因为打字就会累死管理员。我们要设置比如像多久升级一次啊,升级服务器在哪里下载这些东西这些乱七八糟的东西,我们都要给程序指定。去看看配置文件吧,想想看如果那些都要靠人来输入,这容易让人抓狂。但是配置文件这个是必须要看的。我们捡一个例子来说:
- # Maximal size of the log file.
- # Value of 0 disables the limit.
- # You may use 'M' or 'm' for megabytes (1M = 1m = 1048576 bytes)
- # and 'K' or 'k' for kilobytes (1K = 1k = 1024 bytes). To specify the size
- # in bytes just don't use modifiers.
- # Default: 1M
- #LogFileMaxSize 2M
就看最后一行了吧,这里是设置log日志文件的大小,参数就是LogFileMaxSize,而参数值就是2M,中间用空格隔开。这里设置log文件因为clamd是后台作业的,它就像哑巴一样,没有终端可以提供给它打印信息。当然它在后台还是可以打开文件的,所以就让它往log文件里面写内容,我们事后来查。
这里是分析的主函数,贴着方便分析。
- //分析配置文件 message表示是否要显示信息
- struct cfgstruct *parsecfg(const char *cfgfile, int messages)
- {
- char buff[LINE_LENGTH], *name, *arg;
- FILE *fs;
- int line = 0, i, found, ctype, calc;
- struct cfgstruct *copt = NULL;
- struct cfgoption *pt;
- struct cfgoption cfg_options[] =
- {
- { "LogFile", OPT_STR
- },
- { "LogFileUnlock", OPT_NOARG},
- { "LogFileMaxSize", OPT_COMPSIZE},
- { "LogTime", OPT_NOARG},
- { "LogClean", OPT_NOARG},
- { "LogVerbose", OPT_NOARG}, /* clamd + freshclam */
- { "LogSyslog", OPT_NOARG},
- { "LogFacility", OPT_STR},
- { "PidFile", OPT_STR},
- { "TemporaryDirectory", OPT_STR},
- { "DisableDefaultScanOptions", OPT_NOARG},
- { "ScanPE", OPT_NOARG},
- { "DetectBrokenExecutables", OPT_NOARG},
- { "ScanMail", OPT_NOARG},
- { "MailFollowURLs", OPT_NOARG},
- { "ScanHTML", OPT_NOARG},
- { "ScanOLE2", OPT_NOARG},
- { "ScanArchive", OPT_NOARG},
- { "ScanRAR", OPT_NOARG},
- { "ArchiveMaxFileSize", OPT_COMPSIZE},
- { "ArchiveMaxRecursion", OPT_NUM},
- { "ArchiveMaxFiles", OPT_NUM},
- { "ArchiveMaxCompressionRatio", OPT_NUM},
- { "ArchiveLimitMemoryUsage", OPT_NOARG},
- { "ArchiveBlockEncrypted", OPT_NOARG},
- { "ArchiveBlockMax", OPT_NOARG},
- { "DataDirectory", OPT_STR}, /* obsolete */
- { "DatabaseDirectory", OPT_STR}, /* clamd + freshclam */
- { "TCPAddr", OPT_STR},
- { "TCPSocket", OPT_NUM},
- { "LocalSocket", OPT_STR},