回覆列表
-
1 # 橘子皮夕夕
-
2 # maimi32709
FD_ZERO(&readSet);FD_SET(fd, &readSet);printf("%d\n",fd);int iRet = select(fd + 1, &readSet, NULL, NULL, &timeout);if(iRet == -1){ printf("/*SerialPort recv_data select error! */\n");return -1;} else if(iRet == 0){ printf("/*SerialPort recv_data select time out! */\n");return -1;} else{ //等待接收if(FD_ISSET(fd, &readSet)){ tmp_len=read(fd, tmp_buf, 1024);if(tmp_len
-
3 # 使用者2458114238191884
select()的機制中提供一fd_set的資料結構,實際上是一long型別的陣列, 每一個數組元素都能與一開啟的檔案控制代碼(不管是Socket控制代碼,還是其他 檔案或命名管道或裝置控制代碼)建立聯絡,建立聯絡的工作由程式設計師完成, 當呼叫select()時,由核心根據IO狀態修改fd_set的內容,由此來通知執 行了select()的程序哪一Socket或檔案可讀或可寫。主要用於Socket通訊當中!
FD_ZERO(&readSet);FD_SET(fd,&readSet);printf("%d\n",fd);intiRet=select(fd+1,&readSet,NULL,NULL,&timeout);if(iRet==-1){printf("/*SerialPortrecv_dataselecterror!*/\n");return-1;}elseif(iRet==0){printf("/*SerialPortrecv_dataselecttimeout!*/\n");return-1;}else{//等待接收if(FD_ISSET(fd,&readSet)){tmp_len=read(fd,tmp_buf,1024);if(tmp_len<0){printf("/*SerialPortrecv_dataerror!*/\n");return-1;}else{memcpy(bOutBuf+iOutBufLen,tmp_buf,tmp_len);iOutBufLen+=tmp_len;memset(tmp_buf,0,1024);iLen=105;if(iOutBufLen==iLen){//printf("/*SerialPortrecv_datasucess:*/\n");//ShowByte(bOutBuf,iOutBufLen);return0;}}}}