真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

selectI實現(xiàn)I/O復(fù)用-創(chuàng)新互聯(lián)

系統(tǒng)提供select函數(shù)來實現(xiàn)多路復(fù)用輸入/輸出模型。select系統(tǒng)調(diào)用是用來讓我們的程序監(jiān)視多個文件句柄的狀態(tài)變化的。

站在用戶的角度思考問題,與客戶深入溝通,找到磴口網(wǎng)站設(shè)計與磴口網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋磴口地區(qū)。

select:該函數(shù)允許進(jìn)程指示內(nèi)核等待多個事件中的任何一個發(fā)生,并只在有一個或多個事件發(fā)生或經(jīng)歷一段指定的時間后才喚醒它。

selectI實現(xiàn)I/O復(fù)用

參數(shù)含義:

timeout:它告知內(nèi)核等待所制定描述符中的任何一個就緒可在多長時間,其timeval結(jié)構(gòu)用于指定這段時間的秒數(shù)和微妙數(shù)。

struct timeval

{

    long tv_sec;//seconds

    long tv_usec;//microseconds

}

有三種情況:

  1. 永遠(yuǎn)等待下去:僅在有一個描述符準(zhǔn)備好I/O時才返回,為此,我們把該參數(shù)設(shè)為NULL.

  2. 等待固定時間:在有一個描述符準(zhǔn)備好I/O時返回,但是不超過由該參數(shù)所指向的timeval結(jié)構(gòu)中指定的秒數(shù)和微妙數(shù)。

  3. 根本不等待:檢查描述符后立即返回,這稱為輪詢,為此該參數(shù)必須指向一個timeval結(jié)構(gòu),而且其中的定時器值必須為0;

前兩種情形的等待通常會被進(jìn)程在等待期間捕獲的信號中斷,并從信號處理函數(shù)返回。

注:有的Linux會在select函數(shù)返回時修改timeval結(jié)構(gòu),從移植性考慮,我們應(yīng)假設(shè)timeval結(jié)構(gòu)在函數(shù)返回時未定義,因而每次調(diào)用select前都得對它進(jìn)行初始化。
中間的三個參數(shù)readset,writeset和exceptset制定我們要內(nèi)核測試讀,寫,異常條件的描述符。

異常原因:

  1.某個套接字的帶外數(shù)據(jù)的到達(dá)

  2.某個已置為分組模式的偽終端存在可從其主端讀取的控制狀態(tài)信息

select使用描述符集,通常是一個×××數(shù)組,其中每個整數(shù)中每一位對應(yīng)一個描述符

四個宏:selectI實現(xiàn)I/O復(fù)用

maxfd:待測試描述符個數(shù):待測試描述符加1,描述符1,2...到maxfd-1均被測試。

中FD_SETSIZE常值是數(shù)據(jù)類型fd_set中描述符總數(shù),其值通常是1024.

select函數(shù)修改三個描述符集,參數(shù)是值-結(jié)果參數(shù),調(diào)用時,是關(guān)心描述符值。返回時,指示那些描述符已就緒。

描述符中任何與未就緒描述符對應(yīng)的位返回時均被清為0,因此每次重調(diào)時,再次把所有描述符集中所關(guān)心的位置1.

返回值:大于0:所有描述符中已就緒的總位數(shù)。

    等于0:超時

    -1:出錯

就緒條件:

selectI實現(xiàn)I/O復(fù)用

//監(jiān)視輸入輸出

#include                                                        
#include
#include
#include
#include
#include
int main()
{
    int read_fd=0;
    int write_fd=1;
    fd_set reads;
    fd_set writes;
    FD_ZERO(&reads);
    FD_ZERO(&writes);
    struct timeval _timeout={5,0};
    int ret=-1;
    int max_fd=write_fd;
    char buf[1024];
    while(1)
    {
         FD_SET(read_fd,&reads);
         FD_SET(write_fd,&writes);
         _timeout.tv_sec=5;
         _timeout.tv_usec=0;
         ret=select(max_fd,&reads,&writes,NULL,&_timeout);
         switch(ret)
         {
             case -1://error
                perror("select");
                break;
             case 0://time out
                printf("time is out...\n");
                break;
             default://normal
                {
                    ssize_t _s;
                    if(FD_ISSET(read_fd,&reads))
                    {
                        _s=read(0,buf,sizeof(buf)-1);
                        buf[_s]='\0';
                        if(strncmp(buf,"quit",4)==0)
                        {
                            printf("quit\n");
                            return 1;
                        }
                        printf("echo: %s",buf);
                    }
                    if(FD_ISSET(write_fd,&writes))
                    {
                        strcpy(buf,"hello world");
                        printf("show: %s\n",buf);
                    }
                }
                break;
         }
     }
    return 0;

運(yùn)行截圖:

selectI實現(xiàn)I/O復(fù)用

實現(xiàn)TCP通信,處理任意個客戶的單進(jìn)程,而不是為每一個客戶派生一個子進(jìn)程。

  1. 創(chuàng)建監(jiān)聽套接字并初始化:調(diào)用socket,bind,listen,唯一描述符是監(jiān)聽描述符初始化數(shù)據(jù)結(jié)構(gòu)。

  2. 阻塞于select:select等待某個事件發(fā)生或新客戶連接的建立或是數(shù)據(jù),F(xiàn)IN或RST的到達(dá)。

  3. accept新連接

     如果監(jiān)聽套接字變?yōu)榭勺x,那么已建立一個新的連接,我們調(diào)用accept并更新相應(yīng)數(shù)據(jù)結(jié)構(gòu)。使用fds數(shù)組中第一個未用項記錄這個已連接描述符。

  4. 檢查現(xiàn)有連接

    對于每個現(xiàn)有客戶連接,我們要測試其描述符是否在select返回描述符集中,如果是就從該客戶讀取一行文本,并回顯,輸出。如果該客戶關(guān)閉了連接,那么read將返回0,更新數(shù)據(jù)結(jié)構(gòu)。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


網(wǎng)站題目:selectI實現(xiàn)I/O復(fù)用-創(chuàng)新互聯(lián)
文章鏈接:http://weahome.cn/article/dpphcd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部