UNIX網路程式設計學習(14)--使用select正確處理EOF的str_cli函式修訂版
//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網路程式設計學習(13)--使用select的str_cli函式的實現程式設計函式
- UNIX網路程式設計學習(10)續--處理accept返回EINTR錯誤的TCP伺服器程式最終(正確)版本程式設計TCP伺服器
- UNIX網路程式設計學習(15)--使用單程式和select的TCP伺服器程式程式設計TCP伺服器
- Linux網路程式設計筆記(修訂版)Linux程式設計筆記
- select函式socket程式設計函式程式設計
- 程式設計珠璣:續(程式設計珠璣.Ⅱ修訂版)程式設計
- UNIX網路程式設計學習(16)--使用poll的TCP伺服器程式程式設計TCP伺服器
- 《UNIX網路程式設計》筆記 - select和poll程式設計筆記
- Python基礎學習篇-4-常用的正規表示式處理函式Python函式
- Recoil 中預設值的正確處理
- UNIX網路程式設計學習(12)--對兩個數求和的str_echo函式-以及sscanf的用法程式設計函式
- 如何開始函式程式設計的學習?函式程式設計
- 翻譯 | 新手開始學習程式設計的正確姿勢程式設計
- 一個非常正確且強大的程式設計學習方法程式設計
- Sanic 處理函式修飾器函式
- JAVA學習線路:day14-網路程式設計Java程式設計
- Linux/Unix C程式設計之的perror函式,strerror函式,errnoLinuxC程式程式設計Error函式
- 正確處理listview的positionView
- 反對函數語言程式設計的政治正確函數程式設計
- Go併發程式設計--正確使用goroutineGo程式設計
- 如何正確處理nonce
- yaml_parse_file函式的正確使用方式YAML函式
- 好程式設計師學習筆記:函式程式設計師筆記函式
- 反應式程式設計是正確的方法嗎? - JAXenter程式設計
- 學習風變程式設計,是我做過最正確的決定!程式設計
- 好程式設計師web前端學習路線分享函式基礎程式設計師Web前端函式
- 好程式設計師大資料學習路線分享UDF函式程式設計師大資料函式
- UNIX網路程式設計學習(4)--值-結果引數程式設計
- [譯] 使用 closest() 函式獲取正確的 DOM 元素函式
- 好程式設計師Java學習路線分享如何處理中文引數程式設計師Java
- JavaScript 設計模式 :正確使用物件導向程式設計的姿勢JavaScript設計模式物件程式設計
- python程式設計學習筆記⑦-1函式Python程式設計筆記函式
- 好程式設計師大資料學習路線分享高階函式程式設計師大資料函式
- 好程式設計師大資料學習路線hive內部函式程式設計師大資料Hive函式
- 14.程式程式設計進階:函式的引數程式設計函式
- 一門多正規化的程式語言Scala學習收尾-函式的使用函式
- Unix哲學(Unix程式設計藝術)程式設計
- Unix程式設計藝術,Unix哲學程式設計