• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-159  評(píng)論-223  文章-30  trackbacks-0
               眾所周知,TLS是指線程局部存儲(chǔ),F(xiàn)IFO是Unix中的命名管道,可用于無(wú)關(guān)進(jìn)程間的通信,而本文描述的TLS FIFO是指這樣一種機(jī)制:如果一個(gè)線程在每次IO操作時(shí),若沒(méi)有連接,則先連接到FIFO服務(wù)端,再將連接關(guān)聯(lián)到這個(gè)線程的TLS中,這里的連接即創(chuàng)建并打開(kāi)唯一的FIFO,之后的讀寫(xiě)就在這個(gè)FIFO連接上進(jìn)行;當(dāng)FIFO連接斷開(kāi)時(shí),在下次IO操作時(shí)會(huì)自動(dòng)重連。這樣一來(lái),用戶程序就只要調(diào)用相關(guān)的IO操作,而不必管理連接,極大地簡(jiǎn)化了程序。使用FIFO通信前先要?jiǎng)?chuàng)建FIFO再打開(kāi)它,其中創(chuàng)建是最重要的操作,結(jié)果有3種情況:成功、失敗和已存在。

            結(jié)構(gòu)定義
            typedef struct 
            {
                int fd;
                char *name;
            }ipc_fifo_t;
              fd存儲(chǔ)FIFO文件描述符,name存儲(chǔ)FIFO文件系統(tǒng)路徑名。

            接口函數(shù)
               創(chuàng)建FIFO
            ipc_fifo_t* ipc_fifo_make(const char *path,mode_t mode);
              path指定FIFO路徑,可以是絕對(duì)路徑或相對(duì)路徑,mode指定訪問(wèn)權(quán)限,若成功則返回一個(gè)FIFO結(jié)構(gòu),否則為NULL;通常被ipc_fifo_open調(diào)用。
               
               打開(kāi)FIFO
            int ipc_fifo_open(ipc_fifo_t **f,const char *path,int flag,mode_t mode);
              flag指定打開(kāi)標(biāo)志,如果包含了O_CREAT標(biāo)志,那么調(diào)用ipc_fifo_make創(chuàng)建新的FIFO對(duì)象并在打開(kāi)成功后替換*f,否則如果*f為空,就分配并初始化一個(gè)fifo結(jié)構(gòu);mode指定訪問(wèn)權(quán)限,僅當(dāng)創(chuàng)建時(shí)生效。雖然f為輸入輸出參數(shù),但操作失敗時(shí)不會(huì)影響它,也就是說(shuō)沒(méi)有副作用。

              ● 發(fā)送數(shù)據(jù)   
            ssize_t ipc_fifo_write(ipc_fifo_t *f,const void *data,size_t size);
              如果成功則返回已發(fā)送的字節(jié)數(shù),否則返回-1,errno表示出錯(cuò)代碼。
               
              ● 接收數(shù)據(jù)
            ssize_t ipc_fifo_read(ipc_fifo_t *f,void *data,size_t size);
              如果成功則返回已發(fā)送的字節(jié)數(shù),否則返回-1,errno表示出錯(cuò)代碼。

              ● 關(guān)閉FIFO
            void ipc_fifo_close(ipc_fifo_t *f);
              當(dāng)通信結(jié)束的時(shí)候,應(yīng)該調(diào)用此函數(shù)來(lái)關(guān)閉FIFO,它會(huì)先刪除FIFO文件和關(guān)閉文件描述符,最后釋放fifo結(jié)構(gòu)。

              ● 獲取TLS FIFO
            ipc_fifo_t* ipc_fifo_tls_get();
              該函數(shù)一般被發(fā)送數(shù)據(jù)接口調(diào)用,若成功則返回一個(gè)FIFO結(jié)構(gòu),否則為NULL;每個(gè)線程對(duì)應(yīng)一個(gè)FIFO對(duì)象,對(duì)于同一線程,獲取的是同一個(gè)FIFO對(duì)象,而后便可調(diào)用ipc_fifo_write來(lái)發(fā)送數(shù)據(jù)。

            工作流程
              創(chuàng)建FIFO
              適用于FIFO客戶端和服務(wù)端,但服務(wù)端由于要異步處理眾多FIFO客戶端,因此要注意以下2個(gè)問(wèn)題,這也是使用FIFO技術(shù)通信的一些細(xì)節(jié)。
              1)必須以非阻塞讀寫(xiě)方式打開(kāi)知名FIFO,即以O(shè)_CREAT|O_RDWR|O_NONBLOCK標(biāo)志來(lái)調(diào)用ipc_fifo_open,這樣才不會(huì)阻塞等待某個(gè)客戶端以同步寫(xiě)方式打開(kāi)知名FIFO而返回,因?yàn)樗褂肙_RDWR標(biāo)志,這樣自己既讀又寫(xiě),加上O_NONBLOCK,就立即返回了。
              2)必須以非阻塞只讀方式打開(kāi)對(duì)應(yīng)客戶端FIFO,即以O(shè)_RDONLY|O_NONBLOCK標(biāo)志調(diào)用ipc_fifo_open,這樣就不會(huì)阻塞接受客戶端建立連接而返回。

              建立FIFO連接
              適用于FIFO客戶端,被發(fā)送數(shù)據(jù)接口調(diào)用,考慮到服務(wù)端可能事先沒(méi)有打開(kāi)知名FIFO來(lái)監(jiān)聽(tīng)連接,所以這里先以異步方式寫(xiě)打開(kāi)知名FIFO如果成功則改以阻塞方式發(fā)送唯一路徑名到服務(wù)端,如果發(fā)送完全后,接著以同步方式寫(xiě)打開(kāi)唯一FIFO,這是為了等待服務(wù)端打開(kāi)了對(duì)應(yīng)的唯一FIFO。

              發(fā)送數(shù)據(jù)

              適用于FIFO客戶端,當(dāng)TLS中沒(méi)有關(guān)聯(lián)對(duì)應(yīng)的FIFO時(shí),則先調(diào)用fifo_tls_get進(jìn)入建立FIFO連接流程,而后再發(fā)數(shù)據(jù)。
            posted on 2014-12-01 00:13 春秋十二月 閱讀(1351) 評(píng)論(2)  編輯 收藏 引用 所屬分類: System

            評(píng)論:
            # re: 基于TLS FIFO的進(jìn)程間通信模型[未登錄](méi) 2014-12-24 18:00 | jiuyueshouyi
            這是在FIFO之上再利用TLS做一層封裝使得每個(gè)線程都使用獨(dú)立的FIFO嗎?或者說(shuō)是TLS的一種應(yīng)用?  回復(fù)  更多評(píng)論
              
            # re: 基于TLS FIFO的進(jìn)程間通信模型[未登錄](méi) 2014-12-24 19:57 | 春秋十二月
            @jiuyueshouyi
            都算是吧  回復(fù)  更多評(píng)論
              
            色婷婷综合久久久久中文| 久久人妻无码中文字幕| 精品国产热久久久福利| 精品久久久久久国产| 日本精品久久久中文字幕| 亚洲婷婷国产精品电影人久久| 亚洲国产精品一区二区久久hs| 国产精品久久久久久久午夜片| 久久99国产精品久久99小说| 国产一区二区精品久久| 色天使久久综合网天天| 国产精品欧美久久久久无广告| 国产A级毛片久久久精品毛片| AAA级久久久精品无码区| 欧美丰满熟妇BBB久久久| 香蕉久久夜色精品国产2020| 国产69精品久久久久99尤物| 午夜精品久久久久久久| 亚洲а∨天堂久久精品| 国产精品亚洲综合专区片高清久久久| 色综合久久综合中文综合网 | 91精品国产综合久久婷婷| 久久九九久精品国产免费直播| 国产精品久久久久9999| 色欲综合久久躁天天躁蜜桃| 亚洲国产精品综合久久一线 | 日本久久久久久久久久| 精品国产一区二区三区久久久狼| 久久伊人精品一区二区三区| 国产一区二区精品久久凹凸 | 日韩精品久久久久久久电影蜜臀| 久久久久久无码国产精品中文字幕| www性久久久com| 久久99中文字幕久久| 国产精品一久久香蕉产线看| 久久人人爽人人爽人人片AV不| 亚洲国产精品无码久久久秋霞2 | 久久精品国产久精国产思思| 热re99久久6国产精品免费| 亚洲午夜久久久影院| 99蜜桃臀久久久欧美精品网站|