本發(fā)明涉及計算機技術(shù)領(lǐng)域,特別是涉及一種網(wǎng)口狀態(tài)信息的獲取方法及裝置。
背景技術(shù):
VxWorks操作系統(tǒng)是美國WindRiver公司于1983年設(shè)計開發(fā)的一種嵌入式實時操作系統(tǒng)(RTOS),是嵌入式開發(fā)環(huán)境的關(guān)鍵組成部分,該操作系統(tǒng)具有良好的持續(xù)發(fā)展能力、高性能的內(nèi)核以及友好的用戶開發(fā)環(huán)境,在嵌入式實時操作系統(tǒng)領(lǐng)域占據(jù)一席之地。
VxWorks操作系統(tǒng)下的網(wǎng)口信息保存在網(wǎng)絡(luò)協(xié)議棧里面,網(wǎng)絡(luò)協(xié)議棧代碼是非常復(fù)雜的。因此,VxWorks操作系統(tǒng)下網(wǎng)口的收發(fā)報文數(shù)量獲取困難,其網(wǎng)口收發(fā)統(tǒng)計信息隱藏在系統(tǒng)很深的地方。目前,VxWorks操作系統(tǒng)下的網(wǎng)口監(jiān)控方法就是研究協(xié)議棧代碼,對每個VxWorks操作系統(tǒng)版本進行適配,找到協(xié)議棧里面存放流量統(tǒng)計、link狀態(tài)的數(shù)據(jù)結(jié)構(gòu),并保存下來。
由于需要研究網(wǎng)絡(luò)協(xié)議棧代碼,其中包括了很多協(xié)議棧的結(jié)構(gòu)體、函數(shù)聲明等,代碼會非常復(fù)雜、難以理解,如果對協(xié)議棧代碼理解不充分還容易出錯;另外,VxWorks操作系統(tǒng)下的網(wǎng)口協(xié)議棧代碼經(jīng)歷過多次大的改動,因此在某一個VxWorks操作系統(tǒng)版本下的代碼并不能應(yīng)用到其他版本,可移植性差。
由此可見,在VxWorks操作系統(tǒng)下如何實現(xiàn)獲取網(wǎng)口狀態(tài)信息的通用性是本領(lǐng)域技術(shù)人員亟待解決的問題。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是提供一種網(wǎng)口狀態(tài)信息的獲取方法及裝置,用于在
VxWorks操作系統(tǒng)下實現(xiàn)獲取網(wǎng)口狀態(tài)信息的通用性。
為解決上述技術(shù)問題,本發(fā)明提供一種網(wǎng)口狀態(tài)信息的獲取方法,包括:
在VxWorks操作系統(tǒng)中申請一塊空閑的內(nèi)存塊,并通過memDevCreate方法把申請的所述內(nèi)存轉(zhuǎn)換成偽內(nèi)存設(shè)備;
利用IO接口打開所述偽內(nèi)存設(shè)備以得到文件句柄,并通過任務(wù)重定向的方式把標準輸出定向至所述文件句柄;
調(diào)用ifconfig函數(shù)以將ifconfig函數(shù)的輸出寫入至所述偽內(nèi)存設(shè)備;
在所述偽內(nèi)存設(shè)備中查找所需的網(wǎng)口狀態(tài)信息。
優(yōu)選地,還包括:恢復(fù)任務(wù)重定向以將打印輸出從所述偽內(nèi)存設(shè)備定向回到所述標準輸出。
優(yōu)選地,具體通過strstr函數(shù)查找所需的網(wǎng)口狀態(tài)信息。
優(yōu)選地,所述網(wǎng)口狀態(tài)信息具體包括網(wǎng)口的收發(fā)報文統(tǒng)計信息和link狀態(tài)信息。
優(yōu)選地,所述內(nèi)存塊的存儲空間為500字節(jié)。
為解決上述技術(shù)問題,本發(fā)明提供一種網(wǎng)口狀態(tài)信息的獲取裝置,包括:
轉(zhuǎn)換單元,用于在VxWorks操作系統(tǒng)中申請一塊空閑的內(nèi)存塊,并通過memDevCreate方法把申請的所述內(nèi)存轉(zhuǎn)換成偽內(nèi)存設(shè)備;
任務(wù)重定向單元,用于利用IO接口打開所述偽內(nèi)存設(shè)備以得到文件句柄,并通過任務(wù)重定向的方式把標準輸出定向至所述文件句柄;
寫入單元,用于調(diào)用ifconfig函數(shù)以將ifconfig函數(shù)的輸出寫入至所述偽內(nèi)存設(shè)備;
查找單元,用于在所述偽內(nèi)存設(shè)備中查找所需的網(wǎng)口狀態(tài)信息。
優(yōu)選地,所述任務(wù)重定向單元,還用于恢復(fù)任務(wù)重定向以將打印輸出從所述偽內(nèi)存設(shè)備定向回到所述標準輸出。
優(yōu)選地,所述查找單元具體通過strstr函數(shù)查找所需的網(wǎng)口狀態(tài)信息。
優(yōu)選地,所述網(wǎng)口狀態(tài)信息具體包括網(wǎng)口的收發(fā)報文統(tǒng)計信息和link狀態(tài)信息。
優(yōu)選地,所述內(nèi)存塊的存儲空間為500字節(jié)。
本發(fā)明所提供的網(wǎng)口狀態(tài)信息的獲取方法及裝置,該方法包括在VxWorks操作系統(tǒng)中申請一塊空閑的內(nèi)存塊,并通過memDevCreate方法把申請的所述內(nèi)存轉(zhuǎn)換成偽內(nèi)存設(shè)備;利用IO接口打開所述偽內(nèi)存設(shè)備以得到文件句柄,并通過任務(wù)重定向的方式把標準輸出定向至所述文件句柄;調(diào)用ifconfig函數(shù)以將ifconfig函數(shù)的輸出寫入至所述偽內(nèi)存設(shè)備;在所述偽內(nèi)存設(shè)備中查找所需的網(wǎng)口狀態(tài)信息。由此可見,本方法通過偽內(nèi)存設(shè)備和任務(wù)重定向方式獲取ifconfig的輸出結(jié)果,不需要分析協(xié)議棧代碼,簡單易行;另外,所用到的函數(shù)都是VxWorks操作系統(tǒng)通用接口函數(shù),可移植性好,可應(yīng)用在所有VxWorks操作系統(tǒng)的版本上。
附圖說明
為了更清楚地說明本發(fā)明實施例,下面將對實施例中所需要使用的附圖做簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例提供的一種網(wǎng)口狀態(tài)信息的獲取方法的流程圖;
圖2為本發(fā)明實施例提供的另一種網(wǎng)口狀態(tài)信息的獲取方法的流程圖;
圖3為本發(fā)明實施例提供的一種網(wǎng)口狀態(tài)信息的獲取裝置的結(jié)構(gòu)圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下,所獲得的所有其他實施例,都屬于本發(fā)明保護范圍。
本發(fā)明的核心是提供一種網(wǎng)口狀態(tài)信息的獲取方法及裝置,用于在VxWorks操作系統(tǒng)下實現(xiàn)獲取網(wǎng)口狀態(tài)信息的通用性。
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面結(jié)合附圖和具體實施方式對本發(fā)明作進一步的詳細說明。
圖1為本發(fā)明實施例提供的一種網(wǎng)口狀態(tài)信息的獲取方法的流程圖。如圖1所示,包括:
S10:在VxWorks操作系統(tǒng)中申請一塊空閑的內(nèi)存塊,并通過memDevCreate方法把申請的內(nèi)存轉(zhuǎn)換成偽內(nèi)存設(shè)備。
可以理解的是,本步驟中內(nèi)存塊必須是空閑的,即沒有存儲其它數(shù)據(jù)的內(nèi)存塊,以防止與后續(xù)存入的網(wǎng)口狀態(tài)信息發(fā)生混亂。在具體實施中,申請的內(nèi)存塊是直接操作的,不能使用文件系統(tǒng)IO接口,本步驟中是通過memDevCreate方法將內(nèi)存塊轉(zhuǎn)換為一個內(nèi)存設(shè)備,從而可以使用文件系統(tǒng)的IO接口,例如open、read等函數(shù)進行讀寫操作。經(jīng)過轉(zhuǎn)換后的偽內(nèi)存設(shè)備就像文件一樣可以打開。
S11:利用IO接口打開偽內(nèi)存設(shè)備以得到文件句柄,并通過任務(wù)重定向的方式把標準輸出定向至文件句柄。
由于轉(zhuǎn)換后的偽內(nèi)存設(shè)備就像文件一樣可以打開,因此,通過IO接口打開之后就得到了對應(yīng)的文件句柄。本步驟中,通過任務(wù)重定向的方式將標準輸出定向到文件句柄。
重定向是指把命令或者可執(zhí)行程序的標準輸出或標準錯誤輸出重新定向到指定文件中。這樣,命令或程序的輸出就不顯示在串口(VxWorks操作系統(tǒng)下是打印到串口)上,而是寫入到指定文件中,即偽內(nèi)存設(shè)備對應(yīng)的文件句柄中。
任務(wù)重定向是指只重定向該任務(wù),即該任務(wù)的輸出不打印到串口,而是寫到指定的文件,這里是指寫到偽內(nèi)存設(shè)備對應(yīng)的文件句柄中。
S12:調(diào)用ifconfig函數(shù)以將ifconfig函數(shù)的輸出寫入至偽內(nèi)存設(shè)備。
由于使用了任務(wù)重定向的方式,因此其他任務(wù)的輸出還是會打印到串口,即不影響其他任務(wù),也就是說其他任務(wù)的輸出不會寫到偽內(nèi)存設(shè)備,不會往偽內(nèi)存設(shè)備寫入其他內(nèi)容,偽內(nèi)存設(shè)備內(nèi)只會有ifocnfig命令的輸出。
比如,在VxWorks操作系統(tǒng)下輸入ifconfig命令,那么在ifconfig就會輸出一堆字符串在串口上,重定向后串口看不到輸出,因為輸出會寫到指定的文件里面,打開文件就可以看到ifconfig命令的輸出,在本實施例就是打開偽內(nèi)存設(shè)備就可以看到ifconfig命令的輸出。
S13:在偽內(nèi)存設(shè)備中查找所需的網(wǎng)口狀態(tài)信息。
由于ifconfig函數(shù)對應(yīng)的輸出就是網(wǎng)口狀態(tài)信息,因此偽內(nèi)存設(shè)備中就存儲了全部的網(wǎng)口狀態(tài)信息。用戶可以根據(jù)實際需求,查找所需要的網(wǎng)口狀態(tài)信息,例如,具體通過strstr函數(shù)查找所需的網(wǎng)口狀態(tài)信息。
作為優(yōu)選地實施方式,網(wǎng)口狀態(tài)信息具體包括網(wǎng)口的收發(fā)報文統(tǒng)計信息和link狀態(tài)信息。
可以理解的是,網(wǎng)口狀態(tài)信息除了上述列舉的兩種以外還可以包含其它的信息,這里只是一種具體的應(yīng)用場景。
作為優(yōu)選地實施方式,內(nèi)存塊的存儲空間為500字節(jié)。
在具體實施中,內(nèi)存塊的存儲空間需要根據(jù)網(wǎng)口的數(shù)量確定,即網(wǎng)口的數(shù)量越多,則包含的網(wǎng)口狀態(tài)信息就會越多,則需要的存儲空間就會越大。通常情況下,如果網(wǎng)口為1個或2個,則內(nèi)存塊的存儲空間有500字節(jié)就可以滿足要求。
本實施例提供的網(wǎng)口狀態(tài)信息的獲取方法,包括在VxWorks操作系統(tǒng)中申請一塊空閑的內(nèi)存塊,并通過memDevCreate方法把申請的所述內(nèi)存轉(zhuǎn)換成偽內(nèi)存設(shè)備;利用IO接口打開所述偽內(nèi)存設(shè)備以得到文件句柄,并通過任務(wù)重定向的方式把標準輸出定向至所述文件句柄;調(diào)用ifconfig函數(shù)以將ifconfig函數(shù)的輸出寫入至所述偽內(nèi)存設(shè)備;在所述偽內(nèi)存設(shè)備中查找所需的網(wǎng)口狀態(tài)信息。由此可見,本方法通過偽內(nèi)存設(shè)備和任務(wù)重定向方式獲取ifconfig的輸出結(jié)果,不需要分析協(xié)議棧代碼,簡單易行;另外,所用到的函數(shù)都是VxWorks操作系統(tǒng)通用接口函數(shù),可移植性好,可應(yīng)用在所有VxWorks操作系統(tǒng)的版本上。
圖2為本發(fā)明實施例提供的另一種網(wǎng)口狀態(tài)信息的獲取方法的流程圖。如圖2所示,作為優(yōu)選地實施方式,還包括:
S20:恢復(fù)任務(wù)重定向以將打印輸出從偽內(nèi)存設(shè)備定向回到標準輸出。
為了不影響其它任務(wù)的進行,本實施例中,在查找到所需的網(wǎng)口狀態(tài)信息之后,恢復(fù)任務(wù)重定向使得后續(xù)的打印輸出從偽內(nèi)存設(shè)備定向回到標準輸出,即命令或執(zhí)行程序顯示在串口,而不輸出到偽內(nèi)存設(shè)備。
圖3為本發(fā)明實施例提供的一種網(wǎng)口狀態(tài)信息的獲取裝置的結(jié)構(gòu)圖。如圖3所示,包括:
轉(zhuǎn)換單元10,用于在VxWorks操作系統(tǒng)中申請一塊空閑的內(nèi)存塊,并通過memDevCreate方法把申請的內(nèi)存轉(zhuǎn)換成偽內(nèi)存設(shè)備。
可以理解的是,內(nèi)存塊必須是空閑的,即沒有存儲其它數(shù)據(jù)的內(nèi)存塊,以防止與后續(xù)存入的網(wǎng)口狀態(tài)信息發(fā)生混亂。在具體實施中,申請的內(nèi)存塊是直接操作的,不能使用文件系統(tǒng)IO接口,轉(zhuǎn)換單元10是通過memDevCreate方法將內(nèi)存塊轉(zhuǎn)換為一個內(nèi)存設(shè)備,從而可以使用文件系統(tǒng)的IO接口,例如open、read等函數(shù)進行讀寫操作。經(jīng)過轉(zhuǎn)換后的偽內(nèi)存設(shè)備就像文件一樣可以打開。
任務(wù)重定向單元11,用于利用IO接口打開偽內(nèi)存設(shè)備以得到文件句柄,并通過任務(wù)重定向的方式把標準輸出定向至文件句柄。
由于轉(zhuǎn)換后的偽內(nèi)存設(shè)備就像文件一樣可以打開,因此,通過IO接口打開之后就得到了對應(yīng)的文件句柄。本步驟中,通過任務(wù)重定向的方式將標準輸出定向到文件句柄。
重定向是指把命令或者可執(zhí)行程序的標準輸出或標準錯誤輸出重新定向到指定文件中。這樣,命令或程序的輸出就不顯示在串口(VxWorks操作系統(tǒng)下是打印到串口)上,而是寫入到指定文件中,即偽內(nèi)存設(shè)備對應(yīng)的文件句柄中。
任務(wù)重定向是指只重定向該任務(wù),即該任務(wù)的輸出不打印到串口,而是寫到指定的文件,這里是指寫到偽內(nèi)存設(shè)備對應(yīng)的文件句柄中。
寫入單元12,用于調(diào)用ifconfig函數(shù)以將ifconfig函數(shù)的輸出寫入至偽內(nèi)存設(shè)備。
由于使用了任務(wù)重定向的方式,因此其他任務(wù)的輸出還是會打印到串口,即不影響其他任務(wù),也就是說其他任務(wù)的輸出不會寫到偽內(nèi)存設(shè)備,不會往偽內(nèi)存設(shè)備寫入其他內(nèi)容,偽內(nèi)存設(shè)備內(nèi)只會有ifocnfig命令的輸出。
比如,在VxWorks操作系統(tǒng)下輸入ifconfig命令,那么在ifconfig就會輸出一堆字符串在串口上,重定向后串口看不到輸出,因為輸出會寫到指定的文件里面,打開文件就可以看到ifconfig命令的輸出,在本實施例就是打開偽內(nèi)存設(shè)備就可以看到ifconfig命令的輸出。
查找單元13,用于在偽內(nèi)存設(shè)備中查找所需的網(wǎng)口狀態(tài)信息。
由于ifconfig函數(shù)對應(yīng)的輸出就是網(wǎng)口狀態(tài)信息,因此偽內(nèi)存設(shè)備中就存儲了全部的網(wǎng)口狀態(tài)信息。用戶可以根據(jù)實際需求,查找所需要的網(wǎng)口狀態(tài)信息,例如,具體通過strstr函數(shù)查找所需的網(wǎng)口狀態(tài)信息??梢岳斫獾氖牵ㄟ^strstr函數(shù)進行查找只是其中的一種實施方式,并不代表只有這一種方式。
作為優(yōu)選地實施方式,網(wǎng)口狀態(tài)信息具體包括網(wǎng)口的收發(fā)報文統(tǒng)計信息和link狀態(tài)信息。
可以理解的是,網(wǎng)口狀態(tài)信息除了上述列舉的兩種以外還可以包含其它的信息,這里只是一種具體的應(yīng)用場景。
作為優(yōu)選地實施方式,內(nèi)存塊的存儲空間為500字節(jié)。
在具體實施中,內(nèi)存塊的存儲空間需要根據(jù)網(wǎng)口的數(shù)量確定,即網(wǎng)口的數(shù)量越多,則包含的網(wǎng)口狀態(tài)信息就會越多,則需要的存儲空間就會越大。通常情況下,如果網(wǎng)口為1個或2個,則內(nèi)存塊的存儲空間有500字節(jié)就可以滿足要求。
本實施例提供的網(wǎng)口狀態(tài)信息的獲取裝置,包括在VxWorks操作系統(tǒng)中申請一塊空閑的內(nèi)存塊,并通過memDevCreate方法把申請的所述內(nèi)存轉(zhuǎn)換成偽內(nèi)存設(shè)備;利用IO接口打開所述偽內(nèi)存設(shè)備以得到文件句柄,并通過任務(wù)重定向的方式把標準輸出定向至所述文件句柄;調(diào)用ifconfig函數(shù)以將ifconfig函數(shù)的輸出寫入至所述偽內(nèi)存設(shè)備;在所述偽內(nèi)存設(shè)備中查找所需的網(wǎng)口狀態(tài)信息。由此可見,本裝置通過偽內(nèi)存設(shè)備和任務(wù)重定向方式獲取ifconfig的輸出結(jié)果,不需要分析協(xié)議棧代碼,簡單易行;另外,所用到的函數(shù)都是VxWorks操作系統(tǒng)通用接口函數(shù),可移植性好,可應(yīng)用在所有VxWorks操作系統(tǒng)的版本上。
作為優(yōu)選地實施方式,任務(wù)重定向單元11,還用于恢復(fù)任務(wù)重定向以將打印輸出從偽內(nèi)存設(shè)備定向回到標準輸出。
由于裝置部分的實施例與方法部分的實施例相互對應(yīng),因此裝置部分的實施例請參見方法部分的實施例的描述,這里暫不贅述。
以上對本發(fā)明所提供的網(wǎng)口狀態(tài)信息的獲取方法及裝置進行了詳細介
紹。說明書中各個實施例采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。對于實施例公開的裝置而言,由于其與實施例公開的方法相對應(yīng),所以描述的比較簡單,相關(guān)之處參見方法部分說明即可。應(yīng)當指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以對本發(fā)明進行若干改進和修飾,這些改進和修飾也落入本發(fā)明權(quán)利要求的保護范圍內(nèi)。
專業(yè)人員還可以進一步意識到,結(jié)合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、計算機軟件或者二者的結(jié)合來實現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。專業(yè)技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應(yīng)認為超出本發(fā)明的范圍。
結(jié)合本文中所公開的實施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實施。軟件模塊可以置于隨機存儲器(RAM)、內(nèi)存、只讀存儲器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動磁盤、CD-ROM、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲介質(zhì)中。