问题:如何增强服务端的能力,同时支持多个客户端?Linux设计哲学:一切皆文件Linux中的文件是什么?侠义:文件系统物理意义上的文件(逻辑上关联的数据集合)广义:设备,通道,内存,..Linux管理的所有对象都理解文件描述符。文件描述符是一个非负整数,本质上是一个句柄。所有对用户(程序员)透明的资源标识符都可以看作句柄。用户使用文件描述符(句柄)与内核交互。通过文件描述符操作相应资源的数据结构。一切都是文件。统一各种设备的操作方式(open,read,write,close)如:IO设备(命令行,显示)网络设备(网卡)...编程实验:将命令行作为文件进行操作#include#includeintmain(){intiofd=0;chars[]="D.T.SoftWare\n";intlen=0;写(iofd,s,sizeof(s));len=读取(0,s,5);s[len]=0;printf("%s\n",s);返回0;}输出:book@100ask:~/Desktop$./a.outD.T.SoftWare1234512345book@100ask:~/Desktop$...book@100ask:~/Desktop$./a.outD.T.SoftWare1234567812345//注意原因only12345book@100ask:~isoutputhere/Desktop$678//注意这里为什么输出678678:commandnotfound回答:a.out应用中输入了“12345678”,但是应用只读取了5个字符,即是“12345”。当应用程序结束时,a.out所在的终端取得所有权,得到“678”,并尝试将其作为命令解析事件相关函数的分类阻塞函数调用后,需要等待非阻塞类型返回前发生的事件调用函数后,可以及时返回(只标记等待事件)。事件发生后,会以阻塞VS轮询的方式传递回调。轮询是指依次访问各个相关设备是否需要服务的方法。轮询可以用来解决导致程序失败的阻塞函数。继续执行的问题神奇的select()函数select()用于监听指定的文件字符是否产生事件。可以通过轮询检测目标文件(事件产生时标记发生变化),根据事件类型做具体处理(如:读数据)intselect(intmaxfd,//maxfd=n(最大文件描述符)+1,标记监听的描述符范围[0-maxfd-1]fd_set*readset,//检查可读性fd_set*writeset,//检查可写性fd_set*exceptset,//检查异常conststructtimeval*timeout);//IO等待时间Select()函数使用步骤select()相关数据类型及操作fd_set的每一位标识一个File描述符,当某位为1时表示监听*FD_SERO(fd_set*fdset);//将fd_set变量的所有位设置为0*FD_SET(intfd,fd_set*fdset);//在fd_set中指定要监控的fd*FD_CLR(intfd,fd_set*fdset);//从fd_set中移除fd,不再监听*FD_ISSET(intfd,fd_set*fdset);//查看fd是否包含在fd_set编程实验中:select()初体验#include#include#include#include<unistd.h>intmain(){intiofd=0;chars[]="D.T.SoftWare";int长度=0;fd_set读取={0};fd_settemps={0};结构timeval超时={0};FD_ZERO(&读取);FD_SET(iofd,&reads);while(1){intr=-1;临时工=读取;//注意!!!timeout.tv_sec=0;timeout.tv_usec=50000;r=select(1,&temps,0,0,&timeout);如果(r>0){len=read(iofd,s,sizeof(s)-1);s[len]=0;printf("输入:%s\n",s);}elseif(r==0){staticintcount=0;睡眠(10000);计数++;if(count>100){printf("dosomethingslse\n");计数=0;}}else{休息;}}return0;}输出:book@100ask:~/Desktop$./a.outhellowordInput:helloworddosomethingslse......思考:使用select()函数可以扩展服务器的功能吗?如果可能,如何实现?