午夜毛片免费看,老师老少妇黄色网站,久久本道综合久久伊人,伊人黄片子

一種自定義外殼程序的注冊、注銷方法及相應(yīng)的系統(tǒng)的制作方法

文檔序號:6599127閱讀:260來源:國知局
專利名稱:一種自定義外殼程序的注冊、注銷方法及相應(yīng)的系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及Linux/Unix操作系統(tǒng)中Shell (外殼程序)的注冊、注銷方法及相應(yīng)的系統(tǒng)。
背景技術(shù)
目前,由于Linux的開源特性,Linux已經(jīng)得到了廣泛的運用。人們在使用Linux 的過程中,需求也在日益倍增,其中之一就是實現(xiàn)在應(yīng)用程序中注冊自定義Shell的問題。在Linux和Unix操作系統(tǒng)中,內(nèi)核運行在內(nèi)核態(tài),應(yīng)用程序運行在用戶態(tài),內(nèi)核態(tài)有自己的系統(tǒng)級Shell,用戶不能更改,而在用戶態(tài)中也只能運行一種系統(tǒng)級Shell。但是在實際開發(fā)測試環(huán)境中,開發(fā)人員通常需要在各應(yīng)用程序中注冊自己需要的不同Shell, 同時,若用戶不再需要此Shell程序,還應(yīng)該能夠隨時注銷應(yīng)用程序中自定義的Shell。而 Linux自帶的Shell工具有很大局限性,無法滿足這些需求,難以普遍使用于實際應(yīng)用環(huán)
^Ml O針對上面這種情況,目前雖然有一些關(guān)于Shell方面的專利,但是還沒有任何專利涉及本領(lǐng)域,也沒有技術(shù)可以解決這個問題,因此尋找一個如何在用戶應(yīng)用程序中注冊和注銷自定義Shell的方法極其必要。

發(fā)明內(nèi)容
本發(fā)明要解決的問題是提供一種管理自定義Shell的方法及系統(tǒng),可以在應(yīng)用程序進程中實現(xiàn)對自定義Shell的注冊。本發(fā)明要解決的另一問題是提供一種管理自定義Shell的方法及系統(tǒng),可以在應(yīng)用程序進程中實現(xiàn)對自定義Shell的注銷。為了解決上述技術(shù)問題,本發(fā)明提供了一種自定義外殼程序(shell)的注冊方法,應(yīng)用于Linux或Unix操作系統(tǒng)平臺,該注冊方法包括在用戶態(tài)下啟動用于請求注冊自定義Shell的應(yīng)用程序進程和用于注冊自定義 Shell的主控進程;該應(yīng)用程序進程與該主控進程建立連接;該應(yīng)用程序進程向該主控進程傳輸注冊命令和需要注冊的自定義Shell的信息;該主控進程對所述自定義Shell進行注冊;該主控進程將注冊結(jié)果返回給該應(yīng)用程序進程。進一步地,上述方法還具有下面特點該應(yīng)用程序進程和該主控進程的連接是通過以下方式建立的該主控進程在用戶態(tài)下啟動后運行一進程間通信的守護線程,該應(yīng)用程序進程向該主控進程發(fā)出套接字 (Socket)連接請求,該守護線程偵聽到該Socket連接請求后,建立與該應(yīng)用程序進程的 Socket 連接;連接建立后,由該守護線程接收該應(yīng)用程序進程傳輸?shù)乃鲎悦詈托枰缘淖远xShell的信息,調(diào)用該主控進程提供的Shell的注冊函數(shù)對所述自定義Shell進行注冊,以及在完成注冊后向該應(yīng)用程序進程返回注冊結(jié)果。進一步地,上述方法還具有下面特點該應(yīng)用程序進程是通過調(diào)用一應(yīng)用編程接口(API)注冊請求函數(shù)作為注冊接口, 來建立與該主控進程的連接,及實現(xiàn)與該主控進程間的數(shù)據(jù)傳輸。進一步地,上述方法還具有下面特點所述注冊命令和需要注冊的自定義Shell的信息包含在該應(yīng)用程序進程傳輸?shù)皆撝骺剡M程的一結(jié)構(gòu)體數(shù)組中,其中,所述自定義Shell的信息包括自定義Shell的名稱和該應(yīng)用程序進程的進程號;該守護進程完成注冊后,將該結(jié)構(gòu)體數(shù)組中的注冊命令修改為已注冊命令,在該結(jié)構(gòu)體數(shù)組中加入根據(jù)所述自定義Shell的信息創(chuàng)建的虛擬終端從設(shè)備的名稱,然后將包含注冊結(jié)果的該結(jié)構(gòu)體數(shù)組返回給該應(yīng)用程序進程。進一步地,上述方法還具有下面特點該主控進程在用戶態(tài)下啟動后還運行自定義Shell的管理線程,所述管理線程采用鏈表統(tǒng)一管理已注冊的自定義Shell的相關(guān)信息,該相關(guān)信息包括自定義Shell的信息, 根據(jù)自定義Shell的信息創(chuàng)建的虛擬終端的信息,以及為自定義Shell創(chuàng)建的遠程登錄 (telnet)守護線程的信息。為了解決上述技術(shù)問題,本發(fā)明還提供了一種基于Linux或Unix操作系統(tǒng)平臺實現(xiàn)自定義外殼程序(shell)注冊的系統(tǒng),包括啟動裝置,用于在用戶態(tài)下啟動用于請求注冊自定義Shell的應(yīng)用程序進程和用于注冊自定義Shell的主控進程;連接裝置,基于該應(yīng)用程序進程和該主控進程實現(xiàn),用于在該應(yīng)用程序進程與該主控進程之間建立連接;第一傳輸裝置,基于該應(yīng)用程序進程和該主控進程實現(xiàn),用于通過所述連接將注冊命令和需要注冊的自定義shell的信息從該應(yīng)用程序進程傳輸?shù)皆撝骺剡M程;注冊裝置,基于該主控進程實現(xiàn),用于對所述自定義shell進行注冊;第二傳輸裝置,基于該應(yīng)用程序進程和該主控進程實現(xiàn),用于通過所述連接將注冊結(jié)果從該主控進程返回給該應(yīng)用程序進程。進一步地,上述系統(tǒng)還具有下面特點所述連接裝置建立該應(yīng)用程序進程與該主控進程之間的連接時,是在該應(yīng)用程序和該主控進程啟動后運行的一進程間通信的守護線程之間建立起套接字(Socket)連接;所述第一傳輸裝置是通過所述Socket連接將注冊命令和需要注冊的自定義 shell的信息,從該應(yīng)用程序進程傳輸?shù)皆撌刈o線程,所述自定義Shell的信息包括自定義 Shell的名稱和該應(yīng)用程序進程的進程號;所述注冊裝置是基于該守護線程調(diào)用該主控進程提供的Shell的注冊函數(shù)實現(xiàn)對所述自定義Shell進行注冊;所述第二傳輸裝置是通過所述Socket連接將注冊結(jié)果從該主控進程返回給該應(yīng)用程序進程,所述注冊結(jié)構(gòu)包括根據(jù)所述自定義Shell的信息創(chuàng)建的虛擬終端從設(shè)備的名稱。
進一步地,上述系統(tǒng)還具有下面特點還包括,管理裝置,用于基于該主控線程在用戶態(tài)下啟動后運行的自定義Shell的管理線程,采用鏈表統(tǒng)一管理已注冊的自定義Shell的相關(guān)信息,該相關(guān)信息包括自定義Shell的信息,根據(jù)自定義Shell的信息創(chuàng)建的虛擬終端的信息,以及為自定義Shell創(chuàng)建的遠程登錄(telnet)守護線程的信息。為了解決上述技術(shù)問題,本發(fā)明還提供了一種自定義外殼程序(shell)的注銷方法,應(yīng)用于Linux或Unix操作系統(tǒng)平臺,該注銷方法包括在用戶態(tài)下啟動用于請求注銷自定義Shell的應(yīng)用程序進程和用于注銷自定義 Shell的主控進程;該應(yīng)用程序進程與該主控進程建立連接;該應(yīng)用程序進程向該主控進程傳輸注銷命令和需要注銷的自定義Shell的信息;該主控進程對所述自定義Shell進行注銷;該主控進程將注銷結(jié)果返回給該應(yīng)用程序進程。進一步地,上述方法還具有下面特點該應(yīng)用程序進程和該主控進程的連接是通過以下方式建立的該主控進程在用戶態(tài)下啟動后運行一進程間通信的守護線程,該應(yīng)用程序進程向該主控進程發(fā)出套接字 (Socket)連接請求,該守護線程偵聽到該Socket連接請求后,建立與該應(yīng)用程序進程的 Socket 連接;連接建立后,該守護線程接收該應(yīng)用程序進程傳輸?shù)乃鲎N命令和需要注銷的自定義Shell的信息,調(diào)用該主控進程提供的Shell的注銷函數(shù)對所述自定義Shell進行注銷,完成注銷后向該應(yīng)用程序進程返回注銷結(jié)果。進一步地,上述方法還具有下面特點該應(yīng)用程序進程是通過調(diào)用一應(yīng)用編程接口(API)注銷請求函數(shù)作為注銷接口, 來建立與該主控進程的連接,及實現(xiàn)與該主控進程間的數(shù)據(jù)傳輸。進一步地,上述方法還具有下面特點所述注銷命令和需要注銷的自定義Shell的信息包含在該應(yīng)用程序進程傳輸?shù)皆撝骺剡M程的一結(jié)構(gòu)體數(shù)組中,其中,所述自定義Shell的信息包括自定義Shell的名稱和該應(yīng)用程序進程的進程號;該守護進程完成注銷后,將該結(jié)構(gòu)體數(shù)組中的注銷命令修改為關(guān)閉命令,刪除所述自定義Shell的相關(guān)信息,然后將包含注銷結(jié)果的該結(jié)構(gòu)體數(shù)組返回給該應(yīng)用程序進程。為了解決上述技術(shù)問題,本發(fā)明還提供了一種基于Linux或Unix操作系統(tǒng)平臺實現(xiàn)自定義外殼程序(shell)注銷的系統(tǒng),包括 啟動裝置,用于在用戶態(tài)下啟動用于請求注銷自定義Shel 1的應(yīng)用程序進程和用于注銷和管理自定義Shell的主控進程;連接裝置,基于該應(yīng)用程序進程和該主控進程實現(xiàn),用于在該應(yīng)用程序進程與該主控進程之間建立連接;第一傳輸裝置,基于該應(yīng)用程序進程和該主控進程實現(xiàn),用于通過所述連接將注銷命令和需要注銷的自定義shell的信息從該應(yīng)用程序進程傳輸?shù)皆撝骺剡M程;
注銷裝置,基于該主控進程實現(xiàn),用于對所述自定義shell進行注銷;第二傳輸裝置,基于該應(yīng)用程序進程和該主控進程實現(xiàn),用于通過所述連接將注銷結(jié)果從該主控進程返回給該應(yīng)用程序進程。進一步地,上述系統(tǒng)還具有下面特點所述連接裝置建立該應(yīng)用程序進程與該主控進程之間的連接時,是在該應(yīng)用程序和該主控進程啟動后運行的一進程間通信的守護線程之間建立起套接字(Socket)連接;所述第一傳輸裝置是通過所述Socket連接將注銷命令和需要注銷的自定義 shell的信息,從該應(yīng)用程序進程傳輸?shù)皆撌刈o線程,所述自定義Shell的信息包括自定義 Shell的名稱和該應(yīng)用程序進程的進程號;所述注銷裝置是基于該守護線程調(diào)用該主控進程提供的Shell的注銷函數(shù)實現(xiàn)對所述自定義Shell進行注銷;所述第二傳輸裝置是通過所述Socket連接將注銷結(jié)果從該主控進程返回給該應(yīng)用程序進程。綜上,本發(fā)明提供一種自定義外殼程序的注冊、注銷方法及相應(yīng)的系統(tǒng),在LinuX\ Unix系統(tǒng)中實現(xiàn)了在應(yīng)用程序進程中注冊所需Shell,以及注銷無用自定義Shell的功能, 并可在主控端對注冊的自定義Shell進行監(jiān)控和管理,從而提高開發(fā)人員和測試人員的工作效率,為開發(fā)和測試工作帶來極大的方便。


圖1是本發(fā)明實施例的實現(xiàn)自定義shell注冊的系統(tǒng)的示意圖;圖2是本發(fā)明實施例的實現(xiàn)自定義shell注銷的系統(tǒng)的示意圖;圖3是本發(fā)明實施例的自定義Shell的注冊方法的流程圖;圖4是本發(fā)明實施例的自定義Shell的注銷方法的流程圖。
具體實施例方式下面結(jié)合附圖及實施例對本發(fā)明的技術(shù)方案進行更詳細的說明。圖1是本發(fā)明實施例的實現(xiàn)自定義外殼程序(shell)注冊的系統(tǒng)的示意圖,如圖1 所示,本實施例的系統(tǒng)是基于Linux或Unix操作系統(tǒng)平臺來實現(xiàn)自定義shell的注冊,包括啟動裝置、連接裝置、第一傳輸裝置、注冊裝置和第二傳輸裝置。其中,啟動裝置,用于在用戶態(tài)下啟動用于請求注冊自定義Shell的應(yīng)用程序進程和用于注冊自定義Shell的主控進程;連接裝置,基于該應(yīng)用程序進程和該主控進程實現(xiàn),用于在該應(yīng)用程序進程與該主控進程之間建立連接;第一傳輸裝置,基于該應(yīng)用程序進程和該主控進程實現(xiàn),用于通過所述連接將注冊命令和需要注冊的自定義shell的信息從該應(yīng)用程序進程傳輸?shù)皆撝骺剡M程;注冊裝置,基于該主控進程實現(xiàn),用于對所述自定義shell進行注冊;第二傳輸裝置,基于該應(yīng)用程序進程和該主控進程實現(xiàn),用于通過所述連接將注冊結(jié)果從該主控進程返回給該應(yīng)用程序進程。具體地,連接裝置建立該應(yīng)用程序進程與該主控進程之間的連接時,是在該應(yīng)用程序和該主控進程啟動后運行的一進程間通信的守護線程之間建立起套接字(Socket)連接;第一傳輸裝置是通過所述Socket連接將注冊命令和需要注冊的自定義shell的信息,從該應(yīng)用程序進程傳輸?shù)皆撌刈o線程,所述自定義Shell的信息包括自定義Shell的名稱和該應(yīng)用程序進程的進程號;注冊裝置是基于該守護線程調(diào)用該主控進程提供的Shell的注冊函數(shù)實現(xiàn)對所述自定義Shell進行注冊;所述第二傳輸裝置是通過所述Socket連接將注冊結(jié)果從該主控進程返回給該應(yīng)用程序進程,所述注冊結(jié)構(gòu)包括根據(jù)所述自定義Shell的信息創(chuàng)建的虛擬終端從設(shè)備的名稱。進一步地,本實施例的系統(tǒng)還可以包括一管理裝置,可以用于基于該主控線程在用戶態(tài)下啟動后運行的自定義Shell的管理線程,采用鏈表統(tǒng)一管理已注冊的自定義 Shell的相關(guān)信息,該相關(guān)信息包括自定義Shell的信息,根據(jù)自定義Shell的信息創(chuàng)建的虛擬終端的信息,以及為自定義Shell創(chuàng)建的遠程登錄(telnet)守護線程的信息。圖2是本發(fā)明實施例的實現(xiàn)自定義外殼程序(shell)注銷的系統(tǒng)的示意圖,如圖2 所示,本實施例的系統(tǒng)是基于Linux或Unix操作系統(tǒng)平臺來實現(xiàn)自定義shell的注銷,包括啟動裝置、連接裝置、第一傳輸裝置、注冊裝置和第二傳輸裝置。本實施例中,啟動裝置,用于在用戶態(tài)下啟動用于請求注銷自定義Shell的應(yīng)用程序進程和用于注銷和管理自定義Shell的主控進程;連接裝置,基于該應(yīng)用程序進程和該主控進程實現(xiàn),用于在該應(yīng)用程序進程與該主控進程之間建立連接;第一傳輸裝置,基于該應(yīng)用程序進程和該主控進程實現(xiàn),用于通過所述連接將注銷命令和需要注銷的自定義shell的信息從該應(yīng)用程序進程傳輸?shù)皆撝骺剡M程;注銷裝置,基于該主控進程實現(xiàn),用于對所述自定義shell進行注銷;第二傳輸裝置,基于該應(yīng)用程序進程和該主控進程實現(xiàn),用于通過所述連接將注銷結(jié)果從該主控進程返回給該應(yīng)用程序進程。進一步地,連接裝置建立該應(yīng)用程序進程與該主控進程之間的連接時,可以是在該應(yīng)用程序和該主控進程啟動后運行的一進程間通信的守護線程之間建立起套接字 (Socket)連接;第一傳輸裝置可以是通過所述Socket連接將注銷命令和需要注銷的自定義 shell的信息,從該應(yīng)用程序進程傳輸?shù)皆撌刈o線程,所述自定義Shell的信息包括自定義 Shell的名稱和該應(yīng)用程序進程的進程號;注銷裝置,可以具體用于基于該守護線程調(diào)用該主控進程提供的Shell的注銷函數(shù)實現(xiàn)對所述自定義Shell進行注銷;所述第二傳輸裝置是通過所述Socket連接將注銷結(jié)果從該主控進程返回給該應(yīng)用程序進程。為了實現(xiàn)對自定義Shell的注冊,本實施例提供了用戶態(tài)下統(tǒng)一的自定義Shell 的注冊接口,用于實現(xiàn)自定義Shell注冊的應(yīng)用程序進程可以直接調(diào)用該注冊接口,并將該應(yīng)用程序源文件與注冊接口源文件一起編譯。
在一個示例中,本實施例為自定義Shell的注冊提供了專門的應(yīng)用編程接口 (Application Programming Interface,簡禾爾API)注冊請求函數(shù) sh—register (char*name, int*Sh_index),在自定義Shell的編程過程中可以直接調(diào)用該注冊請求函數(shù),然后在編譯過程中將sh_regiSter.c文件拷貝到自定義Shell的源碼目錄下,統(tǒng)一編譯即可。該示例是將自定義Shell作為應(yīng)用程序來實現(xiàn)對自身的注冊,但在另一個示例中,也可以在其他的應(yīng)用程序中調(diào)用該注冊請求函數(shù),實現(xiàn)對一個或多個自定義Shell的注冊。圖3是本發(fā)明實施例的自定義Shell的注冊方法的流程圖,如圖所示,包括下面步驟S11、在用戶態(tài)下啟動用于請求注冊自定義Shell的應(yīng)用程序進程和用于注冊自定義Shell的主控進程;S12、應(yīng)用程序進程調(diào)用注冊接口,啟動自定義Shell的注冊請求過程,向主控進程發(fā)出連接請求;應(yīng)用程序進程是通過調(diào)用一應(yīng)用編程接口(API)注冊請求函數(shù)作為注冊接口,來建立與該主控進程的連接,及實現(xiàn)與該主控進程間的數(shù)據(jù)傳輸。該注冊接口可以為上述的 API 函數(shù) sh_register (char*name,int*sh_index)。S13、主控進程偵聽到該應(yīng)用程序進程發(fā)出的連接請求后,建立與該應(yīng)用程序進程的連接;用戶態(tài)下自定義Shell的注冊和注銷涉及多進程的操作,進程間的通信采用套接字(Socket)機制,主控進程在用戶態(tài)下啟動一進程間通信的守護線程(主控進程包括多個線程,守護線程是主控進程的一部分)local—socket來偵聽進程間通信,該守護線程偵聽到該應(yīng)用程序進程發(fā)出的Socket連接請求后,建立起該主控進程與應(yīng)用程序進程的 Socket連接。在另一實施例中,也可以由主控進程直接進行進程間通信的守護,負(fù)責(zé)偵聽、 與應(yīng)用程序進程間的通信和對Shell的管理,而不是運行多個線程。S14、應(yīng)用程序進程向主控進程傳輸注冊命令和需要注冊的自定義Shell的信息;注冊命令可以只有一種,也可以再細分為首次注冊命令和重新注冊命令。本實施例中傳輸?shù)淖远xShell的信息包括自定義Shell的名稱和應(yīng)用程序進程的進程號等。該傳輸具體可以在主控進程的守護線程和應(yīng)用程序進程之間進行。在一個示例中,可以通過以下的結(jié)構(gòu)體數(shù)組來傳送上述信息typedef struct reg_sh_info{pid_t pid ;//應(yīng)用程序進程號#define REGSH 0x55aaff00//注冊命令定義#define ASSIGNFD 0x55aaff01// 已注冊命令定義#define RETRY 0x55aaff02//重新注冊命令定義#define UNREGSH 0x55aaff03//注銷命令定義!!define CL0SEFD 0x55aaff04//關(guān)閉命令定義int cmd;//命令名char sh_name[16] ;// 注冊的 Shell 名稱char pty_name[16] ;//主控端分配的 pty 名稱
}reg_sh_info_t ;// 結(jié)構(gòu)體名稱該結(jié)構(gòu)體數(shù)組包括應(yīng)用程序進程號(pid)4字節(jié),命令名(cmd)4字節(jié),注冊的 Shell名稱(sh_name)和pty名稱(pty_name)各16字節(jié),總共40字節(jié)的信息。其中的cmd 設(shè)置為REGSH,將data, pid設(shè)置為getpid (),getpid ()設(shè)置為所述應(yīng)用程序進程的進程號。S15、主控進程收到應(yīng)用程序進程傳輸?shù)淖远xShell的信息后,識別出其中的命令名為注冊命令,調(diào)用操作系統(tǒng)提供的注冊函數(shù)注冊所述自定義Shell,并將注冊結(jié)果返回給應(yīng)用程序進程;具體地,主控進程的守護線程獲取來自應(yīng)用程序進程傳送的自定義Shell的信息如上述的reg_Sh_inf0_t數(shù)組后,根據(jù)數(shù)組中的cmd來進行操作。當(dāng)cmd為REGSH時,調(diào)用主控進程提供的注冊函數(shù)registerOneShelK&data)進行自定義Shell的注冊。注冊成功后將cmd命令置為ASSIGNFD (已注冊),并將reg_Sh_inf0_t數(shù)組相關(guān)信息回傳到應(yīng)用程序進程,注冊函數(shù)registerOneShelK&data)所進行的注冊操作可以包括記錄該自定義Shell的信息,比如該自定義Shell的名稱、列表序號和進程號等, 以便主控進程對注冊的自定義Shell進行管理。根據(jù)該自定義Shell的信息創(chuàng)建相應(yīng)的虛擬終端(PTY)并記錄該pty的信息,包括Pty主設(shè)備的名稱、名柄,pty從設(shè)備的名稱、句柄;為該自定義Shell創(chuàng)建一個遠程登錄(telnet)守護線程,記錄該telnet的信息, 如進程號和端口號等,使用戶可以通過telnet守護線程進行遠程登錄。主控進程的守護線程完成對自定義Shell的注冊后,將reg_Sh_inf0_t結(jié)構(gòu)體數(shù)組中的cmd置為ASSIGNFD,在pty_name[16]中寫入pty從設(shè)備的名稱,然后將修改后的數(shù)組返回給應(yīng)用程序進程。S16,應(yīng)用程序進程收到主控進程返回的注冊結(jié)果后,進行相關(guān)參數(shù)設(shè)置,關(guān)閉與主控進程的連接。具體地,應(yīng)用程序進程接收到主控進程的通訊守護線程返回的reg_Sh_inf0_t結(jié)構(gòu)體數(shù)組相關(guān)信息后,設(shè)置PTY屬性。例如,可以將PTY屬性設(shè)置為多用戶或單用戶等。主控進程可以采用鏈表來統(tǒng)一管理已注冊的自定義Shell的相關(guān)信息,在一個示例中,該鏈表的結(jié)構(gòu)如下所示typedef struct list_pty{
進程打開*
11
struct list_pty氺next ; pid_t pid_sh ; /氺 iH禾呈 pid*/
pid_t pid_tel ;Melnet 的 pid,僅用于用戶定義 shell*/ int fdlndex ;/*shell 的列表序號 */ int port ;/*telnet 登錄的端口號 */ int fd_m ;/氺pty主設(shè)備(master)句柄氺/
int fd_s;/*pty從設(shè)備(slave)的句柄,保存在一個全局變量中,由應(yīng)用程序 int fd_socket ;/氺telnetd(遠程登錄)socket 句柄,方便在 pthread_cancel (線程取消)telnetd時關(guān)閉連接*/char shell—name[16] ; φ shell 的名字氺/char ptym_name [32] ;/氺pty master 的設(shè)備名氺/char ptys_name [32] ;/氺pty slave 的設(shè)備名氺/} list_pty_t ;為了實現(xiàn)對自定義Shell的注銷,本實施例提供了用戶態(tài)下統(tǒng)一的自定義Shell 的注銷接口,用于實現(xiàn)自定義Shell注銷的應(yīng)用程序進程可直接調(diào)用該注銷接口,并將該應(yīng)用程序源文件與注銷接口源文件一起編譯。在一個示例中,本實施例為自定義Shell的注銷提供了專門的應(yīng)用編程接口 (Application Programming Interface,簡禾爾 API)注銷請求函數(shù) sh—unregister (int*sh_ index),在自定義Shell的編程過程中可以直接調(diào)用該注銷請求函數(shù),然后在編譯過程中將stuimregister. c文件拷貝到自定義Shell的源碼目錄下,統(tǒng)一編譯即可。該示例是將自定義Shell作為應(yīng)用程序來實現(xiàn)對自身的注銷,但在另一個示例中,也可以在其他的應(yīng)用程序中實現(xiàn)對自定義Shell進行注銷。圖4是本發(fā)明實施例的自定義Shell的注銷方法的流程圖,如圖所示,包括下面步驟S21、在用戶態(tài)下啟動用于請求注銷自定義Shell的應(yīng)用程序進程和用于注銷自定義Shell的主控進程;S22、應(yīng)用程序進程調(diào)用注銷接口,啟動自定義Shell的注銷請求過程,向主控進程發(fā)出連接請求;應(yīng)用程序進程是通過調(diào)用一應(yīng)用編程接口(API)注銷請求函數(shù)作為注銷接口,來建立與該主控進程的連接,及實現(xiàn)與該主控進程間的數(shù)據(jù)傳輸。該注銷接口可以為上述的API 函數(shù) sh_unregister (int*sh_index)。S23、主控進程偵聽到該應(yīng)用程序進程發(fā)出的連接請求后,建立與該應(yīng)用程序進程的連接;主控進程與應(yīng)用程序進程之間的具體連接操作與上述注冊方法中的步驟S13中的連接操作一致,在本實施例是通過運行一進程間通信的守護線程來實現(xiàn)的,但本發(fā)明不局限于此,具體過程這里就不再重復(fù)說明。S24、應(yīng)用程序進程向主控進程傳輸注銷命令和需要注銷的自定義Shell的信息;本實施例中傳輸?shù)淖远xShell的信息包括自定義Shell的名稱和應(yīng)用程序進程號。該傳輸具體可以在主控進程的守護線程和應(yīng)用程序進程之間進行。在一個示例中,仍可以通過上述步驟S14中的結(jié)構(gòu)體數(shù)組來傳送上述信息,其中的cmd設(shè)置為UNREGSH。S25、主控端收到客戶端傳輸?shù)淖远xShell的信息后,識別出其中的命令名為注銷命令,調(diào)用操作系統(tǒng)提供的注銷函數(shù)注銷所述自定義Shell,并將注銷結(jié)果返回給客戶端;具體地,主控進程的守護線程獲取來自應(yīng)用程序進程傳送的自定義Shell的信息如上述的reg_Sh_inf0_t數(shù)組后,根據(jù)數(shù)組中的cmd來進行操作。當(dāng)cmd為UNREGSH時,調(diào)用主控進程提供的注銷函數(shù)unregisterOneShellO進行自定義Shell的注銷,刪除管理的該自定義Shell的相關(guān)信息。注銷成功后將cmd命令置為CL0SEFD (關(guān)閉),并將reg_sh_ info_t數(shù)組回傳到應(yīng)用程序進程。S26,應(yīng)用程序進程收到主控進程返回的注銷結(jié)果后,關(guān)閉與主控進程的連接。具體地,應(yīng)用程序進程接收到主控進程的通訊守護線程返回的reg_Sh_inf0_t結(jié)構(gòu)體數(shù)組相關(guān)信息后,在stuimregister ()中將應(yīng)用程序進程打開的pty從設(shè)備關(guān)閉,最后關(guān)閉進程間通信的socket 口,這樣,就完成了自定義shell的注銷功能。采用本發(fā)明所述的方法,與現(xiàn)有技術(shù)相比,實現(xiàn)了在LinUX\UniX操作系統(tǒng)中,用戶可以在應(yīng)用程序進程中注冊所需自定義Shell,以及注銷無用自定義Shell的功能,從而提供了開發(fā)人員和測試人員的工作效率,為開發(fā)和測試工作帶來極大的方便。本發(fā)明的核心思想是通過在用戶態(tài)下啟動一個用戶進程作為主控進程,用于管理用戶自定義Shell,提供一種能在用戶態(tài)下將自定義Shell注冊到應(yīng)用程序中,以及根據(jù)自身需要隨時注銷掉已注冊的自定義Shell的方案。以上所述僅為本發(fā)明的優(yōu)選實例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可有各種更改和變化,本發(fā)明的保護范圍以權(quán)利要求為準(zhǔn)。
權(quán)利要求
1.一種自定義外殼程序(shell)的注冊方法,應(yīng)用于Linux或Unix操作系統(tǒng)平臺,該注冊方法包括在用戶態(tài)下啟動用于請求注冊自定義Shell的應(yīng)用程序進程和用于注冊自定義Shell 的主控進程;該應(yīng)用程序進程與該主控進程建立連接;該應(yīng)用程序進程向該主控進程傳輸注冊命令和需要注冊的自定義Shell的信息;該主控進程對所述自定義Shell進行注冊;該主控進程將注冊結(jié)果返回給該應(yīng)用程序進程。
2.如權(quán)利要求1所述的注冊方法,其特征在于該應(yīng)用程序進程和該主控進程的連接是通過以下方式建立的該主控進程在用戶態(tài)下啟動后運行一進程間通信的守護線程,該應(yīng)用程序進程向該主控進程發(fā)出套接字(Socket) 連接請求,該守護線程偵聽到該Socket連接請求后,建立與該應(yīng)用程序進程的Socket連接;連接建立后,由該守護線程接收該應(yīng)用程序進程傳輸?shù)乃鲎悦詈托枰缘淖远xShell的信息,調(diào)用該主控進程提供的Shell的注冊函數(shù)對所述自定義Shell進行注冊,以及在完成注冊后向該應(yīng)用程序進程返回注冊結(jié)果。
3.如權(quán)利要求1或2所述的注冊方法,其特征在于該應(yīng)用程序進程是通過調(diào)用一應(yīng)用編程接口(API)注冊請求函數(shù)作為注冊接口,來建立與該主控進程的連接,及實現(xiàn)與該主控進程間的數(shù)據(jù)傳輸。
4.如權(quán)利要求2所述的注冊方法,其特征在于所述注冊命令和需要注冊的自定義Shell的信息包含在該應(yīng)用程序進程傳輸?shù)皆撝骺剡M程的一結(jié)構(gòu)體數(shù)組中,其中,所述自定義Shell的信息包括自定義Shell的名稱和該應(yīng)用程序進程的進程號;該守護進程完成注冊后,將該結(jié)構(gòu)體數(shù)組中的注冊命令修改為已注冊命令,在該結(jié)構(gòu)體數(shù)組中加入根據(jù)所述自定義Shell的信息創(chuàng)建的虛擬終端從設(shè)備的名稱,然后將包含注冊結(jié)果的該結(jié)構(gòu)體數(shù)組返回給該應(yīng)用程序進程。
5.如權(quán)利要求2所述的注冊方法,其特征在于該主控進程在用戶態(tài)下啟動后還運行自定義Shell的管理線程,所述管理線程采用鏈表統(tǒng)一管理已注冊的自定義Shell的相關(guān)信息,該相關(guān)信息包括自定義Shell的信息, 根據(jù)自定義Shell的信息創(chuàng)建的虛擬終端的信息,以及為自定義Shell創(chuàng)建的遠程登錄 (telnet)守護線程的信息。
6.一種基于Linux或Unix操作系統(tǒng)平臺實現(xiàn)自定義外殼程序(shell)注冊的系統(tǒng),其特征在于,包括啟動裝置,用于在用戶態(tài)下啟動用于請求注冊自定義Shell的應(yīng)用程序進程和用于注冊自定義Shell的主控進程;連接裝置,基于該應(yīng)用程序進程和該主控進程實現(xiàn),用于在該應(yīng)用程序進程與該主控進程之間建立連接;第一傳輸裝置,基于該應(yīng)用程序進程和該主控進程實現(xiàn),用于通過所述連接將注冊命令和需要注冊的自定義shell的信息從該應(yīng)用程序進程傳輸?shù)皆撝骺剡M程;注冊裝置,基于該主控進程實現(xiàn),用于對所述自定義shell進行注冊; 第二傳輸裝置,基于該應(yīng)用程序進程和該主控進程實現(xiàn),用于通過所述連接將注冊結(jié)果從該主控進程返回給該應(yīng)用程序進程。
7.如權(quán)利要求6所述的系統(tǒng),其特征在于所述連接裝置建立該應(yīng)用程序進程與該主控進程之間的連接時,是在該應(yīng)用程序和該主控進程啟動后運行的一進程間通信的守護線程之間建立起套接字(Socket)連接;所述第一傳輸裝置是通過所述Socket連接將注冊命令和需要注冊的自定義shell的信息,從該應(yīng)用程序進程傳輸?shù)皆撌刈o線程,所述自定義Shell的信息包括自定義Shell的名稱和該應(yīng)用程序進程的進程號;所述注冊裝置是基于該守護線程調(diào)用該主控進程提供的Shell的注冊函數(shù)實現(xiàn)對所述自定義Shell進行注冊;所述第二傳輸裝置是通過所述Socket連接將注冊結(jié)果從該主控進程返回給該應(yīng)用程序進程,所述注冊結(jié)構(gòu)包括根據(jù)所述自定義Shell的信息創(chuàng)建的虛擬終端從設(shè)備的名稱。
8.如權(quán)利要求7所述的系統(tǒng),其特征在于還包括,管理裝置,用于基于該主控線程在用戶態(tài)下啟動后運行的自定義Shell的管理線程, 采用鏈表統(tǒng)一管理已注冊的自定義Shell的相關(guān)信息,該相關(guān)信息包括自定義Shell的信息,根據(jù)自定義Shell的信息創(chuàng)建的虛擬終端的信息,以及為自定義Shell創(chuàng)建的遠程登錄 (telnet)守護線程的信息。
9.一種自定義外殼程序(shell)的注銷方法,應(yīng)用于Linux或Unix操作系統(tǒng)平臺,該注銷方法包括在用戶態(tài)下啟動用于請求注銷自定義Shell的應(yīng)用程序進程和用于注銷自定義Shell 的主控進程;該應(yīng)用程序進程與該主控進程建立連接;該應(yīng)用程序進程向該主控進程傳輸注銷命令和需要注銷的自定義Shell的信息; 該主控進程對所述自定義Shell進行注銷; 該主控進程將注銷結(jié)果返回給該應(yīng)用程序進程。
10.如權(quán)利要求9所述的注銷方法,其特征在于,該應(yīng)用程序進程和該主控進程的連接是通過以下方式建立的該主控進程在用戶態(tài)下啟動后運行一進程間通信的守護線程,該應(yīng)用程序進程向該主控進程發(fā)出套接字(Socket) 連接請求,該守護線程偵聽到該Socket連接請求后,建立與該應(yīng)用程序進程的Socket連接;連接建立后,該守護線程接收該應(yīng)用程序進程傳輸?shù)乃鲎N命令和需要注銷的自定義Shell的信息,調(diào)用該主控進程提供的Shell的注銷函數(shù)對所述自定義Shell進行注銷, 完成注銷后向該應(yīng)用程序進程返回注銷結(jié)果。
11.如權(quán)利要求9或10所述的注銷方法,其特征在于該應(yīng)用程序進程是通過調(diào)用一應(yīng)用編程接口(API)注銷請求函數(shù)作為注銷接口,來建立與該主控進程的連接,及實現(xiàn)與該主控進程間的數(shù)據(jù)傳輸。
12.如權(quán)利要求10所述的注銷方法,其特征在于所述注銷命令和需要注銷的自定義Shell的信息包含在該應(yīng)用程序進程傳輸?shù)皆撝骺剡M程的一結(jié)構(gòu)體數(shù)組中,其中,所述自定義Shell的信息包括自定義Shell的名稱和該應(yīng)用程序進程的進程號;該守護進程完成注銷后,將該結(jié)構(gòu)體數(shù)組中的注銷命令修改為關(guān)閉命令,刪除所述自定義Shell的相關(guān)信息,然后將包含注銷結(jié)果的該結(jié)構(gòu)體數(shù)組返回給該應(yīng)用程序進程。
13.一種基于Linux或Unix操作系統(tǒng)平臺實現(xiàn)自定義外殼程序(shell)注銷的系統(tǒng), 其特征在于,包括啟動裝置,用于在用戶態(tài)下啟動用于請求注銷自定義Shell的應(yīng)用程序進程和用于注銷和管理自定義Shell的主控進程;連接裝置,基于該應(yīng)用程序進程和該主控進程實現(xiàn),用于在該應(yīng)用程序進程與該主控進程之間建立連接;第一傳輸裝置,基于該應(yīng)用程序進程和該主控進程實現(xiàn),用于通過所述連接將注銷命令和需要注銷的自定義shell的信息從該應(yīng)用程序進程傳輸?shù)皆撝骺剡M程; 注銷裝置,基于該主控進程實現(xiàn),用于對所述自定義shell進行注銷; 第二傳輸裝置,基于該應(yīng)用程序進程和該主控進程實現(xiàn),用于通過所述連接將注銷結(jié)果從該主控進程返回給該應(yīng)用程序進程。
14.如權(quán)利要求13所述的系統(tǒng),其特征在于,所述連接裝置建立該應(yīng)用程序進程與該主控進程之間的連接時,是在該應(yīng)用程序和該主控進程啟動后運行的一進程間通信的守護線程之間建立起套接字(Socket)連接;所述第一傳輸裝置是通過所述Socket連接將注銷命令和需要注銷的自定義shell的信息,從該應(yīng)用程序進程傳輸?shù)皆撌刈o線程,所述自定義Shell的信息包括自定義Shell的名稱和該應(yīng)用程序進程的進程號;所述注銷裝置是基于該守護線程調(diào)用該主控進程提供的Shell的注銷函數(shù)實現(xiàn)對所述自定義Shell進行注銷;所述第二傳輸裝置是通過所述Socket連接將注銷結(jié)果從該主控進程返回給該應(yīng)用程序進程。
全文摘要
本發(fā)明提供一種自定義外殼程序的注冊、注銷方法及相應(yīng)的系統(tǒng),該注冊方法包括在用戶態(tài)下啟動用于請求注冊自定義Shell的應(yīng)用程序進程和用于注冊自定義Shell的主控進程;該應(yīng)用程序進程與該主控進程建立連接;該應(yīng)用程序進程向該主控進程傳輸注冊命令和需要注冊的自定義Shell的信息;該主控進程對所述自定義Shell進行注冊;該主控進程將注冊結(jié)果返回給該應(yīng)用程序進程。本發(fā)明在Linux\Unix系統(tǒng)中實現(xiàn)了在應(yīng)用程序進程中注冊所需Shell,以及注銷無用自定義Shell的功能,并可在主控端對注冊的自定義Shell進行監(jiān)控和管理,從而提高開發(fā)人員和測試人員的工作效率,為開發(fā)和測試工作帶來極大的方便。
文檔編號G06F9/46GK102169447SQ20101012298
公開日2011年8月31日 申請日期2010年2月25日 優(yōu)先權(quán)日2010年2月25日
發(fā)明者王繼剛, 鐘衛(wèi)東 申請人:中興通訊股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1