freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

一種遠(yuǎn)程管理linux系統(tǒng)工具的設(shè)計(jì)與實(shí)現(xiàn)—免費(fèi)計(jì)算機(jī)-在線瀏覽

2025-02-08 01:34本頁面
  

【正文】 e system remotely. Key words: Linux。C/C++。System Call。但是現(xiàn)在能夠統(tǒng)一對(duì)這些服務(wù)進(jìn)行管理的軟件卻很少的。 國內(nèi)外研究現(xiàn)狀 Linux是現(xiàn)在開源項(xiàng)目的代表,很多大的硬件廠商也在支持 Linux的發(fā)展?,F(xiàn)在 Linux已經(jīng)進(jìn)入到企業(yè)級(jí)應(yīng)用, Webmin是一種基于 B/S模式的遠(yuǎn)程管理 Linux系統(tǒng)的軟件工具。由于 Linux是開源項(xiàng)目的代表,對(duì) Linux的學(xué)習(xí)有助于對(duì)計(jì)算機(jī)系統(tǒng)和軟件理論知識(shí)的提高。 本課題的研究方法 本課題主要是對(duì)網(wǎng)絡(luò)配置、 GTK庫、 Linux系統(tǒng)調(diào)用和網(wǎng)絡(luò)編程方面的研究。 2 GTK編程 GTK簡(jiǎn)介 GTK(GIMP Toolkit,GIMP工具包 )是一個(gè)用于創(chuàng)造圖形用戶接口的多平臺(tái)工具。 GTK最初是 GIMP(GNU圖形處理程序) 開發(fā) 的控件集合,然后它不斷擴(kuò)展,直到今天被用于大量的應(yīng)用程序當(dāng)中。 Gtk將 glib主循環(huán)連接到 Gdk的 X服務(wù)器,并提供一個(gè)方便的接口。 gtk_main()函數(shù)的所有功能都是監(jiān)視 Gtk程序和與 X服 務(wù)的連接,對(duì)同樣的時(shí)間隊(duì)列起作用。所有的 Gtk程序都用這個(gè)技巧使應(yīng)用程序正在運(yùn)行時(shí) main()函數(shù)被阻塞,直到用戶通過點(diǎn)擊鼠標(biāo)或鍵盤來產(chǎn)生一個(gè)信號(hào),并通過該信號(hào)來調(diào)用相應(yīng)的回調(diào)函數(shù)。 ( 1) 信號(hào) 控制權(quán)的傳遞是使用 “ 信號(hào) ” 的方法。有一些信號(hào)是大多數(shù)構(gòu)件都具備的,比如 destory,還有一些是某些構(gòu)件專有的,比如在按扭的 toggled信號(hào)。 這由類似以下所示的函數(shù)實(shí)現(xiàn): Gint gtk_signal_connect(GtkObject *object, Gchar *name, GtkSignalFunc func, gpointer func_data )。 ( 2) 事件 除了上面的信號(hào)機(jī)制外,還有一些和 X事件機(jī)制相對(duì)應(yīng)的事件。將回調(diào)函數(shù)連接到 X的某一個(gè)事件,需要使用 gtk_signal_connect函數(shù),并使用事件名稱作為命名參數(shù)。 GdkEvent是 C中的聯(lián)合體結(jié) 構(gòu),其類型依賴于發(fā)生的事件。將回調(diào)函數(shù)與一個(gè)事件連接起來,需要使用以下形式的函數(shù): gtk_signal_connect( GTK_OBJECT(button), button_press_event GTK_SIGNAL_FUNC(button_press_callback), NULL) ?,F(xiàn)在,當(dāng)鼠標(biāo)移動(dòng)到按鈕上方,鼠標(biāo)按鈕按下時(shí),將調(diào)用 button_press_callback函數(shù)。 第 3 頁 共 33 頁 常用的 GTK構(gòu)件 GTK構(gòu)件可以分為兩種。絕大多數(shù)構(gòu)件都是第一種構(gòu)件,并且可以顯示在 GdkWindow窗口。但是它只可以容納一個(gè)子構(gòu)件, 所以要讓 GtkWindow能容納更多的構(gòu)件必須使用布局控件來布局。 用下面的構(gòu)件向窗口中添加子構(gòu)件: gtk_container_add (GTK_CONTAINER (window), widget)。這些構(gòu)件可以有多個(gè)子構(gòu)件,它們的作用就是管理布局。例如, GtkVBox將它的子構(gòu)件在一個(gè)垂直的棧內(nèi)排列。 GtkTable(表格構(gòu)件 )是很常用的用于定位的構(gòu)件。構(gòu)件可以在網(wǎng)格中占據(jù)任意多個(gè)格子。 要將構(gòu)件放到表格中,可以使用下列函數(shù): void gtk_table_attach(GtkTable *table, GtkWidget *child, gint left_attach, gint right_attach, gint top_attach, gint bottom_attach, gint x options, gint yoptions, gint xpadding,gint ypadding )。它一般用于當(dāng)用戶點(diǎn)擊它時(shí)執(zhí)行某個(gè)動(dòng)作,其使用和創(chuàng)建也相當(dāng)簡(jiǎn)單。按鈕創(chuàng)建以后就可以用上面所講述的 GTK信號(hào)和回調(diào)函數(shù)或事件機(jī)制來實(shí)現(xiàn),當(dāng)按扭按下或有其他操作時(shí)候的回調(diào)函數(shù) 第 4 頁 共 33 頁 來響應(yīng)相應(yīng)的函數(shù)或事件。它支持多種顏色以及多種字體的文本,允許它們以任何需要的形式混合顯示,還有許多與 Emacs兼容的文本編輯命令。 創(chuàng)建新 Text構(gòu)件只有一個(gè)函數(shù): GtkWidget *gtk_text_new( GtkAdjustment *hadj,GtkAdjustment *vadj )。為了在兩種操作模式之間進(jìn)行切換,文本構(gòu)件有以下函數(shù): void gtk_text_set_editable( GtkText *text,gint editable )。插入時(shí)可以指定文本的背景色、前景色和字體。 ( 5) 標(biāo)簽構(gòu)件 GtkLabel(標(biāo)簽構(gòu)件 )是 GTK中最常用的構(gòu)件之一,實(shí)際上它很簡(jiǎn)單。如果需要引發(fā)信號(hào),可以將它放在一個(gè)事件盒構(gòu)件中,或放在按鈕構(gòu)件中。 唯一的參數(shù)是要由標(biāo)簽顯示字符串。 第一參數(shù)是前面創(chuàng)建的標(biāo)簽構(gòu)件 (用 GTK_LABEL()宏轉(zhuǎn)換 ),第二個(gè)參數(shù)是新字符串。在字符串中放置換行符,可以創(chuàng)建多行標(biāo)簽。該構(gòu)件在 GUI(圖形用戶接口 )編程中很常用。許多應(yīng)用程序的“選項(xiàng)”對(duì)話框都使用了這個(gè)構(gòu)件。 GtkWidget *gtk_notebook_new( void )。 ? 在筆記本構(gòu)件中前插頁面: void gtk_notebook_prepend_page(GtkNotebook *notebook, GtkWidget *child, GtkWidget *tab_label )。子構(gòu)件必須分別創(chuàng)建,一般是一個(gè)容器構(gòu)件,比如說表格構(gòu)件。分欄列表構(gòu)件是多列列表構(gòu)件,它有能力處理數(shù)千行的信息。 創(chuàng)建 GtkClist構(gòu)件的方法和創(chuàng)建其他構(gòu)件的方法類似。創(chuàng)建分欄列表的函數(shù): GtkWidget *gtk_clist_new ( gint columns )。 創(chuàng)建列表后,需要向構(gòu)件中添加一些要顯示和操作的數(shù)據(jù),用下面的函數(shù)可以向列表中添加一些數(shù)據(jù)行 : gint gtk_clist_prepend( GtkCList *clist,gchar *text[] )。 用下面的函數(shù)可以刪除一些數(shù)據(jù)行: void gtk_clist_remove( GtkCList *clist,gint row )。 GtkCList構(gòu)件是從容器構(gòu)件GtkContainer派生的,它有容器所具有的一些信號(hào),還 有下面這些附加信號(hào): select_row:選中一行時(shí)引發(fā),該信號(hào)傳遞信息,依次是 GtkCList *clist、 gint row、gint column、 GtkEventButton *event。傳遞的信息與上一個(gè)信號(hào)一樣。所以,要將一個(gè)回調(diào)函數(shù)連接到 select_row信號(hào)上,回調(diào)函數(shù)應(yīng)該像下面這樣: void select_row_callback(GtkWidget *widget,gint row,gint column, 第 6 頁 共 33 頁 GdkEventButton *event,gpointer data)。 以上只是簡(jiǎn)單介紹了本課題在客戶端界面編寫的時(shí)候可用到的 GTK庫函數(shù),但實(shí)際的 GTK比上面的操作 還要復(fù)雜得多。也就是說通過一個(gè)單一的接口就可以處理外圍設(shè)備和程序之間的通信。很多系統(tǒng)服務(wù)和應(yīng)用服務(wù)的配置文件都是以普通文件的形式存在,這些文件很容易通過 Linux的系統(tǒng)調(diào)用來配置和修改,也可以用文檔文件的修改方式來修改。文件讀取分 3步完成:第一步是打開要讀取的文件;第二步是把文件讀取到內(nèi)存中去;第三步是關(guān)閉打開的文件。 其中參數(shù) name是要打開的函數(shù)名字; how是打開的方式;返回值 1為錯(cuò)誤,成功就返回一個(gè)文件描述符。 第 1個(gè)參數(shù)是打開的文件描述符,第 2個(gè)參數(shù)是存儲(chǔ)文件數(shù)據(jù)的內(nèi)存地址,第 3個(gè)參數(shù)是讀取數(shù)據(jù)大小。 ? 系統(tǒng)調(diào)用 write()函數(shù)將內(nèi)存中的數(shù)據(jù)寫入到文件中去,函數(shù)原形: ssize_t resut = write(int fd,void *buff,zize_t amt)。第 1個(gè)參數(shù)是打開的文件描述符;第 2個(gè)參數(shù)是要寫入文件數(shù)據(jù)的內(nèi) 存地址;第 3個(gè)參數(shù)是寫入文件的大小。 close()能關(guān)閉打開的文件,其函數(shù)原形: int result = close(int fd)。參數(shù)是打開的文件描述符號(hào)。 進(jìn)程和線程的使用 (1) Linux進(jìn)程 Linux 進(jìn)程創(chuàng)建很特別。但是 Linux不同,它創(chuàng)建的子進(jìn)程具有和父進(jìn)程相同的數(shù)據(jù)、代碼段。還有一次是返回 0(子進(jìn)程 )。系統(tǒng)調(diào)用wait(amp。status)。 pthread_cearte()函數(shù)可以創(chuàng)建一個(gè)線程: int pthread_ceate(pthread_t *thread, pthread_attr_t *attr, void *(*func)(void*), void *arg)。本課題所用的協(xié)議是 TCP/IP協(xié)議 。 應(yīng) 用層協(xié)議 客戶應(yīng)用程序 服務(wù)器應(yīng)用程序 TCP TCP IP IP 以太網(wǎng)驅(qū)動(dòng) 以太網(wǎng)驅(qū)動(dòng) 以太網(wǎng)驅(qū)動(dòng) TCP 協(xié)議 IP 協(xié)議 以太網(wǎng)協(xié)議 第 8 頁 共 33 頁 圖 1 網(wǎng)絡(luò)示意圖 簡(jiǎn)單的網(wǎng)絡(luò)編程 (1) socket函數(shù) socket 函數(shù)功能是創(chuàng)建一個(gè)套接口描述符,并且指定希望的通信協(xié)議 (使用 IPV4 的TCP,或者使用 IPV6的 UPD等 )。 其中 family參數(shù)指明協(xié)議族, type參數(shù)指明套接口類型, protocol參數(shù)為某個(gè)協(xié)議的常數(shù)。 (2) connect函數(shù) TCP 客戶程序用 connect函數(shù)來發(fā)起和 TCP 服務(wù)程序的連接。 int connect(int sockfd, const sgruct sockaddr *servaddr, socklen_t addrlen)。當(dāng)函數(shù)調(diào)用成功的時(shí)候返回 0,出錯(cuò)就返回 1。 int bind(int sockfd,const struct aockaddr *myadd,socklen_t addrlen)。調(diào)用成功返回 0,錯(cuò)誤返回 1。 int listen(int sockfd,int backlog)。 (5) accept函數(shù) int accept(int sockfd,struct sockaddr *cliaddr,socklen_t *addrlen)。函數(shù)返回值為一個(gè)非負(fù)的描述符表示成功,出錯(cuò)為 1。也就是能和客戶端通信的套接口。 (6)close函數(shù) 套接口編程通常都需要一個(gè) close函數(shù)來關(guān)閉套接口 ,來中斷 TCP的連接。 (7)send()函數(shù) 當(dāng)連接建立了后自然就需要數(shù)據(jù)的傳送和接收, send()函數(shù)是用來想連接的另外一端發(fā)送數(shù)據(jù)。 第 1個(gè)參數(shù)是已經(jīng)連接的套接口的描述符,第 2個(gè)參數(shù)是發(fā)送的數(shù)據(jù)的內(nèi)存地址,第3個(gè)參數(shù)是發(fā)送數(shù)據(jù)的大小,第 4個(gè)參數(shù)是選項(xiàng)。 int recv(int sockfd,void *buf,int len,int flags) 第 1個(gè)參數(shù)是已經(jīng)連接的套接口的描述符,第 2個(gè)參數(shù)是發(fā)送的數(shù)據(jù)的內(nèi)存地址,第3個(gè)參數(shù)是發(fā)送數(shù)據(jù)的大小,第 4個(gè)參數(shù)是選項(xiàng)??蛻舫绦蚬δ苁墙缑娴木帉?,并和服務(wù)程序通信。服務(wù)器程序功能是接收客戶程序的數(shù)據(jù),并且通過收到的數(shù)據(jù)來完成系統(tǒng)或應(yīng)用服務(wù)程序文件的配置。 處理 請(qǐng)求 否 是 初始化數(shù)據(jù) 退出 連接不成功 main() 連接界面 輸入服務(wù)器 IP 建立連接( TCP3 次握手) 用戶主界面 用戶操作 等待連接 TCP 接口 退出 TCP 接口 結(jié)束 結(jié)束 連接成功 第 10 頁 共 33 頁 圖 2 程序總體流程 服務(wù)程序 流程設(shè)計(jì) 服務(wù)程序功能有兩個(gè):一是監(jiān)聽端口,接收數(shù)據(jù)和向客戶程序發(fā)送數(shù)據(jù);二是根據(jù)客戶程序發(fā)送過來的數(shù)據(jù)對(duì)文件修改,其流程圖如圖 3所示。然后再接收客戶程序的數(shù)據(jù) (流程控制字符串 ),通過判斷字符串來控制服務(wù)程序的流程 (圖 3中的虛線部分 )。接收到了“ adduser”字符串就進(jìn)入添加用戶流程;接收到“ deluser”字符串就 進(jìn)入刪除用戶流程;接收到“ scanuser”字符串就進(jìn)入了瀏覽用戶流程;接收到“ property”字符串就進(jìn)入到了修改用戶流程,系統(tǒng)用戶管理操作流程如圖 4所示。 /etc/passwd的用戶都是按照統(tǒng)一存格式來存儲(chǔ),格式舉例如下: terrycheops:x:500:500:terrycheop:/home/terrycheops:/bin/bash 存儲(chǔ)中每個(gè)字段都用“:”隔開的,第一字段:用戶名(也被稱為登錄名),在上面的例子中,我們看到用戶的用戶名是 terrycheops;第二字段:口令,在例子中我們看到的是一個(gè) x,其實(shí)密碼已被映射到 /etc/shadow 文件中;第三字段:用戶的 ID;第四字段:用戶組的 ID;第五字段:用戶名全 稱,可選項(xiàng);第六字段:用戶的家目錄所在位置,該用戶的
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1