在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于ARM-Linux嵌入式系統(tǒng)的多進(jìn)程并發(fā)服務(wù)器設(shè)計(jì)

            基于ARM-Linux嵌入式系統(tǒng)的多進(jìn)程并發(fā)服務(wù)器設(shè)計(jì)

            作者: 時(shí)間:2016-09-12 來(lái)源:網(wǎng)絡(luò) 收藏

            bind (listen_fd,(struct sockaddr*)client_addr,sizeof(client_addr))

            當(dāng)調(diào)用socket0函數(shù)創(chuàng)建一個(gè)套接字時(shí),默認(rèn)情況下它是一個(gè)主動(dòng)套接字。所以對(duì)于TCP服務(wù)器,在綁定操作后,必須要調(diào)用listen0函數(shù),將這個(gè)未連接的套接字轉(zhuǎn)換。

            成被動(dòng)套接字,使它處在監(jiān)聽(tīng)模式下,指示內(nèi)核應(yīng)接受發(fā)向該套接字的連接請(qǐng)求。在調(diào)用listen0函數(shù)后,服務(wù)器的狀態(tài)從close轉(zhuǎn)換到listen狀態(tài)。Listen第二個(gè)狀態(tài)字代表的是最大連接數(shù),本系統(tǒng)設(shè)置的最大連接數(shù)為10。

            listen(listen_fd,10);

            接受客戶(hù)連接,客戶(hù)協(xié)議地址和長(zhǎng)度省略接收,失敗accept_fd=-1,置errno。如果建立連接。并且fork0=0,那么程序就進(jìn)入子進(jìn)程進(jìn)行執(zhí)行。

            accept_fd=accept(listen_fd,NULL,NULL);

            清除一個(gè)文件描述符集,并將一個(gè)新文件描述符加入文件描述符集中,其作用就是更新文件描述符。

            FD_ZERO(fds);

            FD_SET(aecept_fd,fds);

            函數(shù)select0是給出每個(gè)描述符我們所關(guān)心的條件:是否讀描述符、是否想寫(xiě)描述符、是否描述符的異常條件。tv指等待時(shí)間。FD_ISS ET()測(cè)試該集中的一個(gè)給定位是否有變化、更新。

            retval=select(accept_fd+1,fds,NULL,NULL,tv);

            FD_ISSET(accept_fd,fds)

            調(diào)用read0可以接收buffer數(shù)據(jù)緩沖區(qū),1 024指接收數(shù)據(jù)緩沖區(qū)大小,n為接收字節(jié)數(shù)。

            n=read(aecept_fd,buffer,1 024);

            調(diào)用子程序modbus.c,執(zhí)行相應(yīng)操作,調(diào)用make_modbus_ack0生成回發(fā)數(shù)據(jù),并通過(guò)send0回發(fā)給客戶(hù)端。

            send_count=make_modbus_ack(buffer,n);

            send(accept_fd,buffer,send_count,0)

            3 ARM-Linux多進(jìn)程服務(wù)移植與實(shí)現(xiàn)

            3.1 程序編譯移植

            Makefile的作用就是讓編譯器知道要編譯一個(gè)文件需要依賴(lài)哪些文件,同時(shí)當(dāng)那些依賴(lài)文件更新時(shí),編譯器會(huì)自動(dòng)發(fā)現(xiàn)最終生成的文件已經(jīng)過(guò)時(shí),而重新編譯相應(yīng)模塊。Makefile定義了一系列規(guī)則來(lái)指定各文件,如依賴(lài)性、先后順序及是否需要更新等。

            ARM平臺(tái)上的Makefile

            CROSS=arm-linux-

            arm-modbus-server.main.c modbus.c

            $(CROSS)gcc-o arm-modbus-server main.c modbus.c

            clean:

            rm-vf*.o

            編譯譯基于ARM的modbus網(wǎng)絡(luò)程序如下圖,首先我們看到文件夾里沒(méi)有可執(zhí)行文件arm-modbus-server,輸入:#make

            執(zhí)行Makefile文件,進(jìn)行編譯連接依賴(lài)文件:main.c、modbus.c、std_c.h。

            然后生成我們所需要的文件arm-modbus-server。

            3.2 并發(fā)服務(wù)器測(cè)試

            本測(cè)試是基于ARM9的linux2.9內(nèi)核平臺(tái)。首先使用chmod修改arm-modbus-server執(zhí)行權(quán)限,然后運(yùn)行./arm-modbus-server即服務(wù)器程序已經(jīng)啟動(dòng)。

            啟用兩個(gè)客戶(hù)端通過(guò)IP訪問(wèn)服務(wù)器,可見(jiàn)如圖5所示,已顯示并發(fā)服務(wù)器運(yùn)行正常。

            基于ARM-Linux嵌入式系統(tǒng)的多進(jìn)程并發(fā)服務(wù)器設(shè)計(jì)

            4 結(jié)論

            本文詳細(xì)介紹了并發(fā)服務(wù)器的原理結(jié)構(gòu),分析了基于linux下的并發(fā)服務(wù)器程序代碼,并且移植到ARM平臺(tái)上運(yùn)行,實(shí)現(xiàn)了小型嵌入式服務(wù)器的制作。這種低成本、低噪聲、低功耗、高穩(wěn)定性、高安全性的嵌入式服務(wù)器,將在我們信息化發(fā)展中的智能樓宇、智能家電、智能移動(dòng)設(shè)備中獲得應(yīng)用。


            上一頁(yè) 1 2 下一頁(yè)

            評(píng)論


            相關(guān)推薦

            技術(shù)專(zhuān)區(qū)

            關(guān)閉