至急!select函数应用,简易的聊天程序中,用select函数代替fgets和read,达到同时监听键盘和其他终端

以下是部分程序代码,本人看得懂但是总写不出来……求好心人直接告诉我改完后的程序是什么样子的~~~~当然,如果能讲得明白也感激不尽……/*实际通信*/while(feof(... 以下是部分程序代码,本人看得懂但是总写不出来……求好心人直接告诉我改完后的程序是什么样子的~~~~当然,如果能讲得明白也感激不尽……
/* 实际通信*/
while (feof(stdin) == 0){
/* 从socket读取data */
recvlen = read(sock, buf, sizeof(buf));
if (recvlen <= 0){
/* client EOF */
break;
}
printf(">> %s", buf);
/* 读取键盘输入内容*/
printf("message : ");
fgets(buf, sizeof(buf), stdin);
/*向socket写入键盘输入信息 */
sendlen = write(sock, buf, strlen(buf) + 1);
if (sendlen < 0){
perror("cannot send a message");
break;
}
}
close(sock);
展开
 我来答
heside123
2011-08-30 · TA获得超过199个赞
知道小有建树答主
回答量:693
采纳率:0%
帮助的人:368万
展开全部
fgets其实就是从stdin里面读取;
read是从描述符sock里面读取;
那么你就可以判断一下,maxfd=(sock>stdin)?sock:stdin

fd_set read_fdset;
while (1)
{
FD_ZERO(&read_fdset);
FD_SET(sock, &read_fdset);
FD_SET(stdin, &read_fdset);
result = select(maxfd + 1, &read_fdset, NULL, NULL, &seltimeout);
if (0 < result)
/* 如果是sock上有数据,则read */
if (FD_ISSET(sock, &read_fdset))

/* 如果是stdin上有数据,则fgets */
if (FD_ISSET(stdin, &read_fdset))
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式