分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
刺猬@http://blog.csdn.net/littlehedgehog
[command]
上回说到主循环(accept_th),这是一个死循环,因为我们Clamd在没有什么特殊的情况下是一直阻塞地苦苦等待在等待有客户端发出请求,然后安排好线程派发(dispatch)工作,接着我们的注意力便专注于线程的运作,这里的command是我们的重点研究对象.
说来command这个函数集众功能于一身,貌似强大无比,但自然也是个程序逻辑中转站,下面来看看里面的部分代码:
- retval = poll_fd(desc, timeout);
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);