UNIX网络编程学习(14)--使用select正确处理EOF的str_cli函数修订版
2012-04-01 19:32
811 查看
//select/strcliselect02.c
#include "unp.h" void str_cli(FILE *fp,int sockfd) { int maxfdp1,stdineof; fd_set rset; // char sendline[MAXLINE],recvline[MAXLINE]; char buf[MAXLINE]; int n; stdineof = 0; FD_ZERO(&rset); for(; ;) { if(stdineof == 0) FD_SET(fileno(fp),&rset); FD_SET(sockfd,&rset); maxfdp1=max(fileno(fp),sockfd)+1; Select(maxfdp1,&rset,NULL,NULL,NULL); if(FD_ISSET(sockfd,&rset)) { if((n=Read(sockfd,buf,MAXLINE)) == 0)//注意此行,(n=Read(sockfd,buf,MAXLINE))外面括号不能少! { if(stdineof == 1) return; else err_quit("str_cli:server terminated prematurelly"); } Write(fileno(stdout),buf,n); } if(FD_ISSET(fileno(fp),&rset)) { if((n = Read(fileno(fp),buf,MAXLINE)) == 0) { stdineof=1; Shutdown(sockfd,SHUT_WR);//send FIN FD_CLR(fileno(fp),&rset); continue; } Writen(sockfd,buf,n); } } } 注意此行,(n=Read(sockfd,buf,MAXLINE))外面括号不能少!否则虽然编译器不报错,(可能会有警告),但是是错误的。去掉括号则变成了一个恒成立的命题。程序也会出现问题。
相关文章推荐
- UNIX网络编程学习(14)--使用select正确处理EOF的str_cli函数修订版
- UNIX网络编程学习(14)--使用select正确处理EOF的str_cli函数修订版
- UNIX网络编程学习(14)--使用select正确处理EOF的str_cli函数修订版
- UNIX网络编程学习(13)--使用select的str_cli函数的实现
- select使用实例——str_cli函数(修订版)
- boost库学习随记六:使用同步定时器、异步定时器、bind、成员函数回调处理、多线程的同步处理示例等
- boost库学习随记六:使用同步定时器、异步定时器、bind、成员函数回调处理、多线程的同步处理示例等
- PHP学习笔记——使用回调函数处理数组的函数array_walk()
- opencv 网站tutorials学习翻译 --使用图形处理函数
- 利用select和shutdown的str_cli函数
- UNIX网络编程学习(10)续--处理accept返回EINTR错误的TCP服务器程序最终(正确)版本
- UNIX网络编程学习(15)--使用单进程和select的TCP服务器程序
- strcpy系列字符串处理函数的常见误用及正确使用方法
- (未实用 需多个函数配套使用)opencv3.0 函数学习 10——morphologyEx 形态学图像处理:开运算、闭运算、形态学梯度、顶帽、黑帽合辑
- 有关opencv的学习(14)—使用自适应阈值处理图像
- PHP - Manual手册 - CLXI. String 字符串处理函数 - str_pad使用另一个字符串将一个字符串填充到指定长度
- C++学习14:使用typedef定义函数指针类型
- C++学习笔记六之函数如何使用指针来处理数组?
- sql时间处理(使用函数DATEPART和STR)