至急!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); 展开
/* 实际通信*/
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); 展开
1个回答
展开全部
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))
}
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))
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询