clamd服务器 ---学习笔记

        实现病毒扫描功能的后台进程,它使用socket通信、信号同步、线程池、后台进程等典型技术。

        标准C库提供了对命令行参数进行分析的函数:

        #include <unistd.h>

        int getopt(int argc, char *const argv[ ] , const char *optstring);//argc和argv[ ]是main函数的参数,optstring表示分析选项的方法

        extern char *optarg;//用来存放选项值

        extern int optind , opterr , optopt;


        #define _GNU_SOURCE

        #include <getopt.h>

        int getopt_long(int argc, char * const  argv[ ], const char *optstring , const struct option *longopts, int *longindex);//longopts为用户定义的选项数组

        int getopt_long_only(int argc, char * const  argv[ ], const char *optstring , const struct option *longopts, int *longindex);//longindex为命令行选项的序号


        struct option//结构option描述了命令行一个参数选项的构成

        {

        const char *name;     //长参数选项名

        int has_arg;                //选项值个数:0,1,2,其中2表示值可有可无

        int *flag;                       //flag为NULL,则getopt_long返回val,否则返回0

        int val;                          //指明返回值,短参数名

        }

        在clamd/option.c中的函数main解析了命令行的各种选项,调用上述C库函数getopt_long依次分析出每个命令行选项,并将每个命令行选项及值存储在链表中,并提供了对这个链表的操作函数,如:创建链表、释放链表、读取链表成员、加入链表成员等。链表定义如下:

        struct optnode{                  //链表结点结构

            char optchar;                  //短选项名

            char *optchar;                //选项值,来自于C库函数getopt_long解析并存在全局变量optarg中的选项值

            char *optname;             //长选项名

            struct optnode *next;    //下一个节点,当为最后一个时,指向NULL

        };

        struct optstruct{

            struct optnode *optlist; //命令行选项链表

            char *filename;

        };

       


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值