《深入理解计算机系统》P652页的select程序

来源:互联网 发布:c语言文件处理引言 编辑:程序博客网 时间:2024/05/18 16:37

1.原程序解释

程序是一个server的程序,主要是使用select来IO多路复用STDIN和套接字的连接请求即listenfd。

重点注意line 23-34

①监听到listenfd

这个时候就accept产生connfd,并且调用echo函数。

echo函数的作用是,一直阻塞接收对面的消息,收到消息就echo完全一样的消息给对方。

②监听到有STDIN

这个时候就调用command函数。

command函数的作用就是将stdin的信息再次printf出来。

注意:由于bash本身就要对stdin进行显示,调用command函数又会再次显示。

所以加入输入aaa,显示为

$aaa

$aaa


2.思考

①一般server

假设我们没有采用select来处理,server就是等待连接请求,当请求到达时accept并且调用echo,并阻塞在echo上面。

这个时候你会发现,在服务器所在的bash进行STDIN仍然会有显示在BASH上面。

所以我猜想,BASH这个时候实际是被共享的,即只要程序没有卡死,BASH就会被STDIN,main函数,。。。共享。

当main函数阻塞时,并不会阻止STDIN等等在BASH上面的显示。

②select server

再对比这个如果先是进行了echo就会和①的效果一样。

如果没有连接请求的情况下就是1.中②的效果。再次验证了BASH共用的观点。


0 0
原创粉丝点击