国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

哪些網(wǎng)站專門做細(xì)胞的好的搜索引擎推薦

哪些網(wǎng)站專門做細(xì)胞的,好的搜索引擎推薦,前端網(wǎng)站做中 英文,wordpress主題 html使用readv和writev函數(shù)可以提高數(shù)據(jù)通信的效率,它們的功能可以概括為**“對(duì)數(shù)據(jù)進(jìn)行整合傳輸及發(fā)送”**。 即使用writev函數(shù)可以將分散在多個(gè)緩沖中的數(shù)據(jù)一并發(fā)送,使用readv函數(shù)可以由多個(gè)緩沖分別接受,所以適當(dāng)使用他們可以減少I/O函數(shù)的調(diào)…

使用readvwritev函數(shù)可以提高數(shù)據(jù)通信的效率,它們的功能可以概括為**“對(duì)數(shù)據(jù)進(jìn)行整合傳輸及發(fā)送”**。
即使用writev函數(shù)可以將分散在多個(gè)緩沖中的數(shù)據(jù)一并發(fā)送,使用readv函數(shù)可以由多個(gè)緩沖分別接受,所以適當(dāng)使用他們可以減少I/O函數(shù)的調(diào)用次數(shù)。

1.readvwritev函數(shù)

readv()函數(shù)
用于從文件描述符中讀取數(shù)據(jù),并存儲(chǔ)在多個(gè)緩沖區(qū)中。

ssize_t readv(
int fd, //文件描述符。
const struct iovec *iov, //指向 iovec 結(jié)構(gòu)體數(shù)組的指針,iovec 結(jié)構(gòu)體定義了一個(gè)緩沖區(qū)。
int iovcnt//iovec 結(jié)構(gòu)體數(shù)組的元素個(gè)數(shù)。
);//iovec 結(jié)構(gòu)體
struct iovec {void *iov_base; //指向緩沖區(qū)的起始地址(基地址)size_t iov_len; //緩沖區(qū)的長(zhǎng)度,即需要傳輸?shù)淖止?jié)數(shù)
};

示例代碼

#include<stdio.h>
#include<sys/uio.h>
#define BUF_SIZE 100
int main(int argc, char *argv[])
{struct iovec vec[2];char buf1[BUF_SIZE] = {0, };char buf2[BUF_SIZE] = {0, };int str_len;//設(shè)置兩個(gè)緩存區(qū),第一個(gè)存儲(chǔ)5個(gè)字節(jié),剩下的給第二個(gè)緩沖區(qū)vec[0].iov_base = buf1;vec[0].iov_len = 5;vec[1].iov_base = buf2;vec[1].iov_len = BUF_SIZE;str_len = readv(0, vec, 2);//第一個(gè)參數(shù)是0,即接受鍵盤輸入printf("Read total bytes: %d \n", str_len);printf("First message: %s \n", buf1);printf("Second message: %s \n", buf2);return 0;
}

在這里插入圖片描述

writev()函數(shù)
用于將多個(gè)緩沖區(qū)中的數(shù)據(jù)寫入文件描述符,這種方法稱為“聚集寫”或“向量寫”。

ssize_t writev(
int fd, //文件描述符
const struct iovec *iov, //指向 iovec 結(jié)構(gòu)體數(shù)組的指針,iovec 結(jié)構(gòu)體定義了一個(gè)緩沖區(qū)。
int iovcnt//iovec 結(jié)構(gòu)體數(shù)組的元素個(gè)數(shù)。
);//iovec 結(jié)構(gòu)體
struct iovec {void *iov_base; //指向緩沖區(qū)的起始地址(基地址)size_t iov_len; //緩沖區(qū)的長(zhǎng)度,即需要傳輸?shù)淖止?jié)數(shù)
};

示例代碼

#include<stdio.h>
#include<sys/uio.h>int main(int argc, char *argv[]){struct iovec vec[2];//有兩個(gè)緩沖char buf1[] = "1234567890";char buf2[] = "ABCDEFGHIJ";int str_len;vec[0].iov_base = buf1;vec[0].iov_len = 10;vec[1].iov_base = buf2;vec[1].iov_len = 10;str_len = writev(1, vec, 2);//第一個(gè)參數(shù)是1,所以是向控制臺(tái)輸出puts("");printf("writev bytes: %d \n", str_len);
}

在這里插入圖片描述

2.在Windows中實(shí)現(xiàn)緊急消息機(jī)制

在《TCP/IP網(wǎng)絡(luò)編程》(第十三章)多種I/O函數(shù)(1)中已經(jīng)基于Linux平臺(tái)實(shí)現(xiàn)了MSG_OOB機(jī)制,但是是基于Linux的信號(hào)處理機(jī)制,所以無(wú)法直接移植到Windows平臺(tái)。

若要在Windows平臺(tái)上實(shí)現(xiàn)該機(jī)制,則需要通過(guò)select()函數(shù),該函數(shù)簡(jiǎn)介參考《TCP/IP網(wǎng)絡(luò)編程》(第十二章)I/O復(fù)用(1)

PS:MSG_OOB在select()監(jiān)視下會(huì)被視為異常數(shù)據(jù)
發(fā)送端代碼

#include<stdio.h>
#include<stdlib.h>
#include<winsock2.h>#define BUFSIZE 30
void ErrorHandling(char* message);int main(int argc, char* argv[]){WSADATA wsa;SOCKET hSocket;SOCKADDR_IN sendAddr;if(argc!=3){printf("Usage : %s <IP> <port>\n", argv[0]);exit(1);}if(WSAStartup(MAKEWORD(2,2), &wsa) != 0){ErrorHandling("WSAStartup() error!");}hSocket = socket(PF_INET, SOCK_STREAM, 0);memset(&sendAddr, 0, sizeof(sendAddr));sendAddr.sin_family = AF_INET;sendAddr.sin_addr.s_addr = inet_addr(argv[1]);sendAddr.sin_port = htons(atoi(argv[2]));if(connect(hSocket, (SOCKADDR*)&sendAddr, sizeof(sendAddr)) == SOCKET_ERROR)ErrorHandling("connect() error!");send(hSocket, "123", 3, 0);send(hSocket, "4", 1, MSG_OOB);//帶外數(shù)據(jù)在select的監(jiān)視中,會(huì)被視為異常數(shù)據(jù)send(hSocket, "567", 3, 0);send(hSocket, "890", 3, MSG_OOB);//只把最后一個(gè)字節(jié)0作為緊急信息發(fā)送closesocket(hSocket);WSACleanup();return 0;
}void ErrorHandling(char* message){fputs(message, stderr);fputc('\n', stderr);exit(1);
}

接受端代碼

#include<stdio.h>
#include<stdlib.h>
#include<winsock2.h>#define BUFSIZE 30
void ErrorHandling(char *);int main(int argc, char *argv[]){WSADATA wsa;SOCKET hAcptSock, hRecvSock;SOCKADDR_IN sendAdr, recvAdr;int sendAdrSz,strLen;char buf[BUFSIZE];int result;fd_set read,except,read_copy,except_copy;struct timeval timeout;if(argc != 2){printf("Usage : %s <port>\n", argv[0]);exit(1);}if(WSAStartup(MAKEWORD(2,2), &wsa) != 0)ErrorHandling("WSAStartup() error!");hAcptSock = socket(PF_INET, SOCK_STREAM, 0);if(hAcptSock == INVALID_SOCKET)ErrorHandling("socket() error");memset(&recvAdr, 0, sizeof(recvAdr));recvAdr.sin_family = AF_INET;recvAdr.sin_addr.s_addr = htonl(INADDR_ANY);recvAdr.sin_port = htons(atoi(argv[1]));if(bind(hAcptSock, (SOCKADDR*)&recvAdr, sizeof(recvAdr)) == SOCKET_ERROR)ErrorHandling("bind() error");if(listen(hAcptSock, 5) == SOCKET_ERROR)ErrorHandling("listen() error");sendAdrSz = sizeof(sendAdr);hRecvSock = accept(hAcptSock, (SOCKADDR*)&sendAdr, &sendAdrSz);FD_ZERO(&read);    // 清空reads集合FD_ZERO(&except);  // 清空except集合FD_SET(hRecvSock, &read);		// 將套接字添加到reads集合FD_SET(hRecvSock, &except);		// 將套接字添加到except集合while(1){read_copy = read;except_copy = except;timeout.tv_sec = 5;timeout.tv_usec = 0;result = select(0, &read_copy, 0, &except_copy, &timeout);//開始監(jiān)視文件描可讀數(shù)集和與異常集合if(result>0){if(FD_ISSET(hRecvSock, &except_copy)){//使用FD_ISSET宏檢查套接字是否在異常集合中。//如果是,表示發(fā)生了異常事件,此時(shí)會(huì)調(diào)用recv函數(shù)并指定MSG_OOB標(biāo)志來(lái)接收帶外數(shù)據(jù)strLen = recv(hRecvSock, buf, BUFSIZE-1, MSG_OOB);buf[strLen] = 0;printf("urgent message: %s \n", buf);}if(FD_ISSET(hRecvSock, &read_copy)){// 如果檢測(cè)到讀事件strLen = recv(hRecvSock, buf, BUFSIZE-1, 0);if(strLen == 0){break;closesocket(hRecvSock);}else{buf[strLen] = 0;printf("normal message: %s", buf);}}}}closesocket(hAcptSock);closesocket(hRecvSock);WSACleanup();return 0;
}void ErrorHandling(char *message){fputs(message, stderr);fputc('\n', stderr);exit(1);
}

在這里插入圖片描述
優(yōu)先接受MSG_OOB信息4和0。

http://aloenet.com.cn/news/31106.html

相關(guān)文章:

  • wordpress評(píng)論框加游戲優(yōu)化大師官方下載
  • 中英網(wǎng)站開發(fā)青島官網(wǎng)seo方法
  • 網(wǎng)站測(cè)試頁(yè)面怎么做網(wǎng)站推廣途徑和推廣要點(diǎn)
  • 天津門戶網(wǎng)站開發(fā)國(guó)家免費(fèi)技能培訓(xùn)官網(wǎng)
  • 睢縣網(wǎng)站建設(shè)如何創(chuàng)建一個(gè)app平臺(tái)
  • 新公司注冊(cè)在哪個(gè)網(wǎng)站全國(guó)31省市疫情最新消息今天
  • 做網(wǎng)站用什么工具百度推廣四川成都地區(qū)服務(wù)中心
  • 做網(wǎng)站要學(xué)java嗎網(wǎng)站seo 工具
  • 新公司注冊(cè)工商核名系統(tǒng)網(wǎng)站優(yōu)化外包
  • 高端用戶群瀏覽網(wǎng)站石家莊網(wǎng)站seo
  • 西安手機(jī)網(wǎng)站建設(shè)公司排名查關(guān)鍵詞熱度的網(wǎng)站
  • 怎樣建立一個(gè)營(yíng)銷的公司網(wǎng)站抖音seo搜索優(yōu)化
  • 卓越 網(wǎng)站建設(shè) 深圳西鄉(xiāng)競(jìng)價(jià)托管
  • 電子商務(wù)網(wǎng)站規(guī)劃的原則是什么seo技術(shù)博客
  • 全國(guó)網(wǎng)站制作公司石家莊seo外包公司
  • 網(wǎng)站開發(fā)周期石家莊關(guān)鍵詞排名提升
  • 海淀網(wǎng)站建設(shè)公司廣告推廣賺錢
  • 佛山優(yōu)化網(wǎng)站排名收費(fèi)關(guān)鍵詞推廣優(yōu)化外包
  • 騰寧網(wǎng)絡(luò)做網(wǎng)站抖音seo怎么收費(fèi)
  • 學(xué)網(wǎng)絡(luò)推廣哪個(gè)培訓(xùn)機(jī)構(gòu)好windows優(yōu)化大師官方免費(fèi)下載
  • 用asp做網(wǎng)站怎么美觀seo網(wǎng)站關(guān)鍵詞快速排名
  • 國(guó)際交友網(wǎng)站做英文客服seo項(xiàng)目分析
  • 網(wǎng)站建設(shè)如何做報(bào)價(jià)會(huì)計(jì)培訓(xùn)班有用嗎
  • 外貿(mào)網(wǎng)站怎么做網(wǎng)站關(guān)鍵詞推廣
  • 用一段話來(lái)解釋網(wǎng)站建設(shè)常用網(wǎng)站推廣方法及資源
  • 世界上前端做的最好的網(wǎng)站營(yíng)銷模式有幾種
  • 做室內(nèi)設(shè)計(jì)兼職的網(wǎng)站營(yíng)銷渠道的概念
  • 網(wǎng)站免費(fèi)建站276人vs猛龍
  • 做網(wǎng)站 客戶一直要求改杭州網(wǎng)絡(luò)推廣有限公司
  • 租房寧波seo網(wǎng)絡(luò)推廣多少錢