【正文】
接收服務(wù)程序發(fā)送過(guò)來(lái)的操作結(jié)果,把結(jié)果顯示給用戶。等服務(wù)程序返回結(jié)果了后,再把服務(wù)程序返回的結(jié)果顯示給用戶。用來(lái)初始化列表。這個(gè)函數(shù)主要作用是向服務(wù)器端發(fā)送一個(gè)“ userscan”字符串,然后服務(wù)程序會(huì)讀取這個(gè)時(shí)候的 /etc/passwd 的內(nèi)容,并且傳遞給發(fā)送到客戶程序,客戶程序把服務(wù)程序傳過(guò)來(lái)的數(shù)據(jù)存儲(chǔ)在臨時(shí)的文件里面,然后把列表框中的數(shù)據(jù)清空,在從臨時(shí)文件中讀取當(dāng)前的用戶信息,重新顯示在列表框中來(lái)。并且向服務(wù)程序發(fā)送一個(gè)“ User”字符串,其界面圖如 16所示。 User_Del()函數(shù)先向服務(wù)器發(fā)送一個(gè)“ User”字符串,和傳遞一個(gè)“ deluser”字符串,然后就把要?jiǎng)h除的用戶名發(fā)送給服務(wù)程序。如圖 15所示。 圖 14 添加用戶界面 當(dāng)圖 14的 Entry按鍵被按下了后,就從上圖中的文本框中讀取字符串,再判斷字符串是否為空,不為空就把 UserNane,FullName,Password所對(duì)應(yīng)的字符串分別傳遞服務(wù)器端。當(dāng)主界面創(chuàng)建好了后就等待用戶的操作了,用戶的操作界面如圖 13所示。其流程如圖 11所示。} init_cli(sock)。 sock = data。 CollFunc()主要作用是讀取文本框中的字符,并且用這個(gè)來(lái)作為連接服務(wù)器的 IP,向服務(wù)器提出連接請(qǐng)求,連接成功就進(jìn)入主界面,并且銷(xiāo)毀連接界面的構(gòu)件。前面對(duì)里面大部分代碼介紹過(guò)了。 gtk_widget_show(textbox)。 gtk_widget_show(mainWin)。 gtk_signal_connect(GTK_OBJECT(exitButt), clicked, GTK_SIGNAL_FUNC(Destroy), NULL)。 gtk_table_attach_defaults((GtkTable*)table,clloButt,0,2,1,2)。 gtk_entry_set_text((GtkEntry *)textbox,input severs IP here!)。 table = gtk_table_new (2, 3, TRUE)。 exitButt = gtk_button_new_with_label(exit)。 char *text。其函數(shù)代碼如下: GtkWidget *textbox。 gtk_init()函數(shù)功能初始化 GTK,并且分析在命令行中傳遞進(jìn)來(lái)的參數(shù)。 ? 連接界面的編寫(xiě) 首先是連接界面的編寫(xiě),主要是用于和服務(wù)器端的連接。讓服務(wù)器程序通過(guò) SOCK傳遞的數(shù)據(jù)來(lái)對(duì)服務(wù)器的配置。 第 20 頁(yè) 共 33 頁(yè) 圖 9 FTP流程圖 客戶程序 設(shè)計(jì)思路 客戶端的作用有兩個(gè):一是為用戶提供操作界面;二是和服務(wù)器端進(jìn)行數(shù)據(jù)通信。 FTP服務(wù)停止、啟動(dòng)和重啟操作是通過(guò) exec調(diào)用 FTP停止、啟動(dòng)和重啟的 shell腳本來(lái)完成的。 修改配置文件操作,先是接收客戶程序發(fā)送過(guò)來(lái)的數(shù)據(jù) (要修改的內(nèi)容 ),然后在配置文件中查找要修改的位置,把客戶程序發(fā)送過(guò)來(lái)的數(shù)據(jù)寫(xiě)到配置文件中。 (5) Apache服務(wù)管理操作 Apache 模塊主要是完成:向客戶程序發(fā)送當(dāng)前的一些 Apache 錯(cuò)誤日志;通過(guò) 客戶發(fā)送過(guò)來(lái)的數(shù)據(jù)進(jìn)行一些簡(jiǎn)單的配置; Apache服務(wù)的開(kāi)啟、關(guān)閉和重啟功能,其流程如圖 8所示。寫(xiě)入成功后發(fā)送“ zone delete succsed”字符串到客戶程序。該模塊主要是為在DNS 中添加和刪除 zone;在 zone 中添加和刪除 domain。然后就判斷第 4個(gè)字符的值,如果是 1 話就把 /etc/,是 0 就取消對(duì)/etc/。 圖 6 系統(tǒng)啟動(dòng)服務(wù)管理流程 服務(wù)程序進(jìn)入到圖 3的 InitAction()函數(shù)就進(jìn)入了系統(tǒng)服務(wù)啟動(dòng)管理流程,接收客戶程序發(fā)送過(guò)來(lái)的數(shù)據(jù),這里發(fā)送過(guò)來(lái)的是一個(gè)有 5個(gè)字符串的數(shù)組。讓客戶程序顯示當(dāng)前的用戶信息。 組的修改過(guò)程,接收客戶端發(fā)送過(guò)來(lái)要添加組的信息,然后把接收的數(shù)據(jù)格式按照/etc/group存儲(chǔ)格式格式化后存復(fù)制到 str變量中。然后打開(kāi)文件 /etc/group,讀取文件中組的數(shù)據(jù)復(fù)制到二維數(shù)組 (temp)中 ,關(guān)閉文件。 (2) 系統(tǒng)用戶組的操作 用戶組( Group)配置文件主要有 /etc/group 和 /etc/gshadow,其中 /etc/gshadow是 /etc/group的加密信息文件。 用戶修改過(guò)程,接收客戶程序發(fā)送過(guò)來(lái)的數(shù)據(jù)后,把接收的數(shù)據(jù)格式化復(fù)制到 str中。 程序進(jìn)入到了刪除用戶流程后,接收客戶程序要?jiǎng)h除用戶的用戶名。 程序進(jìn)入到了添加用戶后,接收客戶程序傳過(guò)來(lái)要添加的用戶信息 (用戶名、密碼、全名 )。接收到了“ adduser”字符串就進(jìn)入添加用戶流程;接收到“ deluser”字符串就 進(jìn)入刪除用戶流程;接收到“ scanuser”字符串就進(jìn)入了瀏覽用戶流程;接收到“ property”字符串就進(jìn)入到了修改用戶流程,系統(tǒng)用戶管理操作流程如圖 4所示。 處理 請(qǐng)求 否 是 初始化數(shù)據(jù) 退出 連接不成功 main() 連接界面 輸入服務(wù)器 IP 建立連接( TCP3 次握手) 用戶主界面 用戶操作 等待連接 TCP 接口 退出 TCP 接口 結(jié)束 結(jié)束 連接成功 第 10 頁(yè) 共 33 頁(yè) 圖 2 程序總體流程 服務(wù)程序 流程設(shè)計(jì) 服務(wù)程序功能有兩個(gè):一是監(jiān)聽(tīng)端口,接收數(shù)據(jù)和向客戶程序發(fā)送數(shù)據(jù);二是根據(jù)客戶程序發(fā)送過(guò)來(lái)的數(shù)據(jù)對(duì)文件修改,其流程圖如圖 3所示??蛻舫绦蚬δ苁墙缑娴木帉?xiě),并和服務(wù)程序通信。 第 1個(gè)參數(shù)是已經(jīng)連接的套接口的描述符,第 2個(gè)參數(shù)是發(fā)送的數(shù)據(jù)的內(nèi)存地址,第3個(gè)參數(shù)是發(fā)送數(shù)據(jù)的大小,第 4個(gè)參數(shù)是選項(xiàng)。 (6)close函數(shù) 套接口編程通常都需要一個(gè) close函數(shù)來(lái)關(guān)閉套接口 ,來(lái)中斷 TCP的連接。函數(shù)返回值為一個(gè)非負(fù)的描述符表示成功,出錯(cuò)為 1。 int listen(int sockfd,int backlog)。 int bind(int sockfd,const struct aockaddr *myadd,socklen_t addrlen)。 int connect(int sockfd, const sgruct sockaddr *servaddr, socklen_t addrlen)。 其中 family參數(shù)指明協(xié)議族, type參數(shù)指明套接口類(lèi)型, protocol參數(shù)為某個(gè)協(xié)議的常數(shù)。本課題所用的協(xié)議是 TCP/IP協(xié)議 。status)。還有一次是返回 0(子進(jìn)程 )。 進(jìn)程和線程的使用 (1) Linux進(jìn)程 Linux 進(jìn)程創(chuàng)建很特別。 close()能關(guān)閉打開(kāi)的文件,其函數(shù)原形: int result = close(int fd)。 ? 系統(tǒng)調(diào)用 write()函數(shù)將內(nèi)存中的數(shù)據(jù)寫(xiě)入到文件中去,函數(shù)原形: ssize_t resut = write(int fd,void *buff,zize_t amt)。 其中參數(shù) name是要打開(kāi)的函數(shù)名字; how是打開(kāi)的方式;返回值 1為錯(cuò)誤,成功就返回一個(gè)文件描述符。很多系統(tǒng)服務(wù)和應(yīng)用服務(wù)的配置文件都是以普通文件的形式存在,這些文件很容易通過(guò) Linux的系統(tǒng)調(diào)用來(lái)配置和修改,也可以用文檔文件的修改方式來(lái)修改。 以上只是簡(jiǎn)單介紹了本課題在客戶端界面編寫(xiě)的時(shí)候可用到的 GTK庫(kù)函數(shù),但實(shí)際的 GTK比上面的操作 還要復(fù)雜得多。傳遞的信息與上一個(gè)信號(hào)一樣。 用下面的函數(shù)可以刪除一些數(shù)據(jù)行: void gtk_clist_remove( GtkCList *clist,gint row )。創(chuàng)建分欄列表的函數(shù): GtkWidget *gtk_clist_new ( gint columns )。分欄列表構(gòu)件是多列列表構(gòu)件,它有能力處理數(shù)千行的信息。 ? 在筆記本構(gòu)件中前插頁(yè)面: void gtk_notebook_prepend_page(GtkNotebook *notebook, GtkWidget *child, GtkWidget *tab_label )。許多應(yīng)用程序的“選項(xiàng)”對(duì)話框都使用了這個(gè)構(gòu)件。在字符串中放置換行符,可以創(chuàng)建多行標(biāo)簽。 唯一的參數(shù)是要由標(biāo)簽顯示字符串。 ( 5) 標(biāo)簽構(gòu)件 GtkLabel(標(biāo)簽構(gòu)件 )是 GTK中最常用的構(gòu)件之一,實(shí)際上它很簡(jiǎn)單。為了在兩種操作模式之間進(jìn)行切換,文本構(gòu)件有以下函數(shù): void gtk_text_set_editable( GtkText *text,gint editable )。它支持多種顏色以及多種字體的文本,允許它們以任何需要的形式混合顯示,還有許多與 Emacs兼容的文本編輯命令。它一般用于當(dāng)用戶點(diǎn)擊它時(shí)執(zhí)行某個(gè)動(dòng)作,其使用和創(chuàng)建也相當(dāng)簡(jiǎn)單。構(gòu)件可以在網(wǎng)格中占據(jù)任意多個(gè)格子。例如, GtkVBox將它的子構(gòu)件在一個(gè)垂直的棧內(nèi)排列。 用下面的構(gòu)件向窗口中添加子構(gòu)件: gtk_container_add (GTK_CONTAINER (window), widget)。絕大多數(shù)構(gòu)件都是第一種構(gòu)件,并且可以顯示在 GdkWindow窗口。現(xiàn)在,當(dāng)鼠標(biāo)移動(dòng)到按鈕上方,鼠標(biāo)按鈕按下時(shí),將調(diào)用 button_press_callback函數(shù)。 GdkEvent是 C中的聯(lián)合體結(jié) 構(gòu),其類(lèi)型依賴(lài)于發(fā)生的事件。 ( 2) 事件 除了上面的信號(hào)機(jī)制外,還有一些和 X事件機(jī)制相對(duì)應(yīng)的事件。有一些信號(hào)是大多數(shù)構(gòu)件都具備的,比如 destory,還有一些是某些構(gòu)件專(zhuān)有的,比如在按扭的 toggled信號(hào)。所有的 Gtk程序都用這個(gè)技巧使應(yīng)用程序正在運(yùn)行時(shí) main()函數(shù)被阻塞,直到用戶通過(guò)點(diǎn)擊鼠標(biāo)或鍵盤(pán)來(lái)產(chǎn)生一個(gè)信號(hào),并通過(guò)該信號(hào)來(lái)調(diào)用相應(yīng)的回調(diào)函數(shù)。 Gtk將 glib主循環(huán)連接到 Gdk的 X服務(wù)器,并提供一個(gè)方便的接口。 2 GTK編程 GTK簡(jiǎn)介 GTK(GIMP Toolkit,GIMP工具包 )是一個(gè)用于創(chuàng)造圖形用戶接口的多平臺(tái)工具。由于 Linux是開(kāi)源項(xiàng)目的代表,對(duì) Linux的學(xué)習(xí)有助于對(duì)計(jì)算機(jī)系統(tǒng)和軟件理論知識(shí)的提高。 國(guó)內(nèi)外研究現(xiàn)狀 Linux是現(xiàn)在開(kāi)源項(xiàng)目的代表,很多大的硬件廠商也在支持 Linux的發(fā)展。System Call。 關(guān)鍵詞 : Linux;系統(tǒng)服務(wù); C/C++; GTK;系統(tǒng)調(diào)用; Socket The Design and Implementation of a Remote Management Tool for Linux Abstract The operating system of Linux has bee one of the most popular operating systems nowadays. It provides many kinds of service. In order to configure and manage the service remotely, the tool of remote management of the operating system of Linux is needed. Webmin is a good tool of software based on the model of B/S. This design is implemented based on the model of C/S. The main functions of the system include addition, modification, deletion of users and groups of Linux operating system and configuration and management of the service of application of the system, such as the DNS, FTP, Apache and the management of booting service. The remote management of service is implemented by modifying the files of configuration. The model of C/S is selected by this system. In the Client, the operating interface is made by the programming of GTK. In the Server, the functions of transferring of files of Linux operating system are used to write and read the data of the configuration fil