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共用的观点。