Clamav杀毒软件源码分析笔记 八

本文主要解析Clamav杀毒软件中的主循环(accept_th)和command函数,关注select系统调用在等待客户端请求时的作用。通过对select的介绍,详细阐述了如何通过fd_set和struct timeval结构设置超时时间,并监听多个文件句柄的状态变化。此外,还提及了在多路复用中如何处理用户输入和线程调度。
摘要由CSDN通过智能技术生成

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               
Clamav杀毒软件源码分析笔记[八]


刺猬@http://blog.csdn.net/littlehedgehog





[command]


上回说到主循环(accept_th),这是一个死循环,因为我们Clamd在没有什么特殊的情况下是一直阻塞地苦苦等待在等待有客户端发出请求,然后安排好线程派发(dispatch)工作,接着我们的注意力便专注于线程的运作,这里的command是我们的重点研究对象.

说来command这个函数集众功能于一身,貌似强大无比,但自然也是个程序逻辑中转站,下面来看看里面的部分代码:

  1.   retval = poll_fd(desc, timeout);  

这里采用了多路复用的代码, 说来多路复用本身还有两套实现方案,这是unix阵营分裂的产物吧. 我这里只看看select,有如下资料:



  select系统调用是用来让我们的程序监视多个文件句柄(file descriptor)的状态变化的。程序会停在select这里等待,直到被监视的文件句柄有某一个或多个发生了状态改变。

文件在句柄在Linux里很多,如果你man某个函数,在函数返回值部分说到成功后有一个文件句柄被创建的都是的,如man socket可以看到“On success, a file descriptor for the new socket is returned.”而man 2 open可以看到“open() and creat() return the new file descriptor”,其实文件句柄就是一个整数,看socket函数的声明就明白了:
int socket(int domain, int type, int protocol);


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值