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

正文內(nèi)容

h20xx032045_一種遠(yuǎn)程管理linux系統(tǒng)工具的設(shè)計(jì)與實(shí)現(xiàn)-文庫吧資料

2024-09-13 07:31本頁面
  

【正文】 DNS_Config () Ftp_Config () 圖 3 服務(wù)程序的流程圖 功能模塊 (1) 系統(tǒng)用戶管理操作 和客戶程序建立了連接,并且收到了 user 字符串后,服務(wù)程序進(jìn)入系統(tǒng)用 戶管理操作模塊,接著接收客戶程序發(fā)送過來的數(shù)據(jù) (字符串 ),通過數(shù)據(jù)來判 斷是對用戶的添加、刪除、瀏覽或修改操作。 圖 3顯示了服務(wù)程序的流程, accept()是監(jiān)聽端口,等待客戶程序的連接, 連接 建立好后 init_cli()函數(shù)從配置文件讀取服務(wù)器的當(dāng)前配置文件數(shù) 據(jù),然后再發(fā)送到客戶程序,讓客戶程序通過這些數(shù)據(jù)來初始化界面。在 Linux 中服務(wù)配置文件主要是以文本文件的形式存在的,所以通過 Linux 系統(tǒng)調(diào)用很 容易修改配置文件,流程如圖 2。 采用 GTK 編寫界面,采用 Sock 編程實(shí)現(xiàn)通信。 第 頁 共 33 頁 9 5 程序設(shè)計(jì)和流程圖 設(shè)計(jì)思路 本課題是采用 C/S 模式。 (8)recv()函數(shù) 數(shù)據(jù)發(fā)送到接收端了后,就可以用 recv()函數(shù)來接收由發(fā)送端發(fā)送過來的 數(shù)據(jù)了。 int send(int sockfd,void *buf,int len,int flags)。 int close(int sockfd)。區(qū)分這兩個(gè)東西是很重要的。 這里需要指出的是參數(shù)的描述符為監(jiān)聽套接口,就是 在等待連接的時(shí)候還 沒有建立連接的套接口,而返回值是連接的新的套接口。 參數(shù) cliaddr 和 addrlen 用來返回已經(jīng)連接的客戶端的協(xié)議地址。 本函數(shù)通常都是在調(diào)用 socket 和 bind 這兩個(gè)函數(shù)之后。 (4) listen 函數(shù) listen 函數(shù)只能由 TCP 服務(wù)器調(diào)用,他完成兩件事: 一是當(dāng) socket 函數(shù)創(chuàng)建一個(gè)套接口時(shí)它是一個(gè)主動(dòng)的套接口,該函數(shù)就是 把它轉(zhuǎn)換成一個(gè)被動(dòng)的套接口 二是該函數(shù)規(guī)定了為相應(yīng)套接口排隊(duì)的最大的連接個(gè)數(shù)。 第 頁 共 33 頁 8 第 2個(gè)參數(shù)是一個(gè)指向特定協(xié)議的地址結(jié)構(gòu)的指針,第 3 個(gè)參數(shù)是該地址 結(jié)構(gòu)的長度。 (3) bind 函數(shù) 該函數(shù)是把一個(gè)本地協(xié)議地址賦予一個(gè)套接口,對于網(wǎng)際協(xié)議,協(xié)議地址 是一個(gè) 32 位的 IPV4 地址和一個(gè) 16 位的 TCP 端口號(hào)的組合。 sockfd 是有 socket 函數(shù)返回的一個(gè)套接口描述符,第 2 個(gè)和第 3 個(gè)參數(shù) 分別是一個(gè)指向套接口地址結(jié)構(gòu)指針和結(jié)構(gòu)的大小。這個(gè)函數(shù)通 常是在客戶程序中使用。函數(shù)調(diào)用成功時(shí)候返回一個(gè)非負(fù)的描述符。 int socket(int family,int type,int protocol)。如果客戶和服務(wù)器處于同一以太 網(wǎng),如圖 1 所示。 4 基本的套接口編程 概述 讓同一網(wǎng)絡(luò)的不同計(jì)算機(jī)的進(jìn)程能夠相互通信,首先要確定這些程序如何 第 頁 共 33 頁 7 進(jìn)行通信。 (2) Linux 線程 進(jìn)程為線程提供了運(yùn)行環(huán)境,多個(gè)函數(shù)可以同時(shí)運(yùn)行,但是他們都是運(yùn)行 在相同的進(jìn)程中的。status)讓父進(jìn)程阻塞直到子進(jìn)程結(jié)束: pid_t result = wait(amp。 在使用 fork()函數(shù)創(chuàng)建進(jìn)程的時(shí)候經(jīng)常父進(jìn)程等待子進(jìn)程結(jié)束。父進(jìn)程和子進(jìn)程間的區(qū)別就是進(jìn)程的 pid 不 同,其他的都一樣: pid_t result = fork(void) 該函數(shù)比較特殊,它返回兩次函數(shù)值,一次返回值是向父進(jìn)程返回子進(jìn)程 的 PID。很多其他操作都提供了產(chǎn)生進(jìn)程的機(jī)制,在新的 進(jìn)程空間中創(chuàng)建進(jìn)程,讀取可執(zhí)行文件。 關(guān)閉成功返回 0,失敗返回 1。 這個(gè)系統(tǒng)調(diào)用會(huì)關(guān)閉進(jìn)程和文件之間的連接。 進(jìn)程不需要再對文件進(jìn)行讀寫操作時(shí),就要關(guān)系文件打開的文件。 這個(gè)系統(tǒng)將調(diào)用 buff的數(shù)據(jù)寫到文件中。如果讀取成功返回值是讀取的字節(jié)數(shù),失敗就返 回 1。 l Linux系統(tǒng)讀取文件內(nèi)容通過系統(tǒng)調(diào)用 read()函數(shù)來實(shí)現(xiàn),函數(shù)原形: ssize_t numread = read(int fd,void *buff,size_t qty)。 l 在 Linux中打開一個(gè)文件可以通過系統(tǒng)調(diào)用 open()函數(shù)來實(shí)現(xiàn): int fd = open(char *name,int how)。 如何從文件中讀取數(shù)據(jù) Linux 文件讀取有兩種方法:一種是通過 C 語言的標(biāo)準(zhǔn)庫函數(shù)調(diào)用來完成; 另一種是通過對 Linux 的系統(tǒng)調(diào)用來完成。 Linux 文件類型常見的有:普通文件、 目錄、字符設(shè)備文件、塊設(shè)備文件、符號(hào)鏈接文件等。 3 Linux 系統(tǒng)調(diào)用 Linux 系統(tǒng)文件 在 Linux 中最主要的資源就是文件,很多設(shè)備都是以文件形式存在的,所 以大多數(shù)輸入 /輸出都要通過文件讀寫來實(shí)現(xiàn)。 回調(diào)函數(shù)用下面的形式連接到信號(hào): gtk_signal_connect(GTK_OBJECT( clist), select_row, GTK_SIGNAL_FUNC(select_row_callback), NULL)。 click_column:選中某一列時(shí)引發(fā),傳遞信息,依次是: GtkCList *clist、 gint column。 unselect_row:用戶對一行取消選擇,引發(fā)這個(gè)信號(hào)。 與其他構(gòu)件一樣, GtkCList有一些信號(hào)供我們使用。 gint gtk_clist_append( GtkCList *clist,gchar *text[] )。 GtkWidget *gtk_clist_new_with_titles(gint columns, gchar *titles[] )。因?yàn)?GtkCList可以有 多列,因而在創(chuàng)建它之前,必須確定要?jiǎng)?chuàng)建的列表的 列數(shù)。每一列都可 以有一個(gè)標(biāo)題,而且可以是活動(dòng)的,還可以將函數(shù)綁定到列選擇上。 ( 7) 分欄列表構(gòu)件 GtkCList(分欄列表構(gòu)件 )是 GtkList(列表構(gòu)件 )的替代品,但它提供更多的 特性。 其中 child參數(shù)是 放在筆記本構(gòu)件上的子構(gòu)件, tab_label是要添加的頁面的 標(biāo)簽。 向筆記本構(gòu)件中添加頁面,主要有兩種方 法,而且非常相似的,如下: l 在筆記本構(gòu)件中追加頁面: void gtk_notebook_append_page(GtkNotebook *notebook, GtkWidget *child, GtkWidget *tab_label )。用下面的函數(shù)可以創(chuàng)建 新筆記本構(gòu)件。 要說明大量的相關(guān)信息,同時(shí)把它們分別顯示時(shí),使用這種構(gòu)件是一個(gè)很好的方 法。 ( 6) 筆記本構(gòu)件 第 頁 共 33 頁 4 GtkNotebook(筆記本構(gòu)件 )是互相重疊的頁面集合,每一頁都包含不同的信 息,且一次只有一個(gè)頁面是可見的。如果需要,新字符串所需的空間會(huì)做 自動(dòng)調(diào)整。創(chuàng)建標(biāo)簽構(gòu)件后,要改變標(biāo)簽內(nèi)的文本, 用以下函數(shù): void gtk_label_set_text( GtkLabel *lacbel,char *str )。用以下函數(shù)創(chuàng)建新標(biāo)簽構(gòu)件: GtkWidget *gtk_label_new(char *str )。因?yàn)闆] 有相關(guān)聯(lián)的 X窗口,標(biāo)簽構(gòu)件不 能引發(fā)信號(hào)。 void gtk_text_insert(GtkText *text, GdkFont *font, GdkColor *fore, GdkColor *back, const char *chars, gint length )。 為了在當(dāng)前插入點(diǎn)插入文本,可以使用 gtk_text_insert函數(shù)。 文本構(gòu)件有兩個(gè)主要用途:允許用戶編輯一段文本,或向用戶顯示多行文本。文本構(gòu)件支持完全的剪切 /粘貼功能,還包括雙擊選擇一個(gè)單詞和 單擊選擇整行的功能。 ( 4) 文本構(gòu)件 GtkText(文本構(gòu)件)允許多行顯示或編輯文本。 可以用 gtk_button_new_with_label()創(chuàng)建帶標(biāo)題的按鈕。 ( 3) 按鈕構(gòu)件 GtkButton(普通按鈕構(gòu)件 )是應(yīng)用程序中使用最廣泛的構(gòu)件。 用 gtk_table_new創(chuàng)建一個(gè)表格構(gòu)件: GtkWidget *gtk_table_new( gint rows,gint columns,gint homogeneous)。我們用表格構(gòu)件創(chuàng)建一個(gè) 網(wǎng)格,把構(gòu)件放在網(wǎng)格里。 GtkTable構(gòu)件可以讓構(gòu)件在一個(gè)表格上根據(jù)單元格定位。 管理布局 意味著這些容器為它們?nèi)菁{的子構(gòu) 件分配大小尺寸和位置。 ( 2) 組裝構(gòu)件 組裝構(gòu)件通常是直接從 GtkContainer派生而來。 用下面的函數(shù)創(chuàng)建新窗口: GtkWidget* gtk_window_new (GtkWindowType type)。 ( 1) GtkWindow 構(gòu)件 GtkWindow構(gòu)件是最大的 容器,它實(shí)際就是一個(gè)窗體構(gòu)件。一種有一個(gè)相關(guān)聯(lián)的 GdkWindow窗口,另一種沒有。回調(diào)函數(shù)可以作如下聲明: 第 頁 共 33 頁 2 static gintbutton_press_callback( GtkWidget *widget, GdkEventButton *event, gpointer data)。 這里假 定 button是一個(gè)按鈕構(gòu)件。要想知道哪一個(gè) 事件已經(jīng)引發(fā),可以查看類型參數(shù),因?yàn)槊總€(gè)可能的可選事件都有一個(gè)反映引發(fā) 事件的類型參數(shù)。事件的回調(diào)函數(shù)與信 號(hào)的回調(diào)函數(shù)在形式上略有不同: Void func(GtkWidget *widget, GdkEvent *event, gpointer callback_data )。回調(diào)函數(shù)也 可以和這些事件連接起來應(yīng)用。 上面函數(shù)的第 3 個(gè)參數(shù)為回調(diào)函數(shù) ,它的形式通常是: void callback_func( GtkWidget *widget, gpointer callback_data )。要讓一個(gè)按鈕執(zhí)行一個(gè)操作,我們需要寫一段信號(hào)處理程序,以捕獲它 的信號(hào),然后調(diào)用相應(yīng)的回調(diào)函數(shù)。一旦事件發(fā)生,比如鼠標(biāo)器按鈕被 按下,被按下的構(gòu)件(按鈕)將引發(fā)適當(dāng)?shù)男盘?hào)。 GTK 是一個(gè)時(shí)間驅(qū)動(dòng)工具包,它將在 gtk_main()函數(shù)中一直等待,直到某 個(gè)事件的發(fā)生或控制權(quán)被交給相應(yīng)的函數(shù)。 gtk_main()函數(shù)用于阻塞該進(jìn)程直到滿足某些條件。 Gtk 分別用 gtk_main()函數(shù)和 gtk_main_quit()函數(shù)來運(yùn)行主循環(huán)和退出 主循環(huán),當(dāng)系統(tǒng)調(diào)用了 gtk_main()函數(shù)后,由于 gtk_main()函數(shù)可以遞歸調(diào) 用, 所以需要調(diào)用 gtk_main_quit()函數(shù)才能退出 gtk。 從根本上來說,主循環(huán)是由 glib 實(shí)現(xiàn)的。它包含有基本的空間和一些很復(fù)雜的控件:例如文件選擇控件。 采用 C/S 模式,在客戶端采用 GTK 函數(shù)實(shí)現(xiàn)用戶界面的編寫,在服務(wù)器端通過 Linux 的系統(tǒng)調(diào)用,來實(shí)現(xiàn)本地服務(wù)配置,然后再通過 Sock 編程來實(shí)現(xiàn)服務(wù)器 和客戶端的通信,傳遞配置內(nèi)容和服務(wù)指令。通過該課 題的設(shè)計(jì)和實(shí)現(xiàn),既解決遠(yuǎn)程管理 Linux 系統(tǒng),又讓自己掌握了一些 Linux 系 統(tǒng)編程和 Sock 編程能力。 本課題研究的意義 本課題是為了給系統(tǒng)管理員提供一種遠(yuǎn)程管理 Linux 中某些主要服務(wù)的工 具軟件,完成服務(wù)配置管理和查看一些重要的數(shù)據(jù)。 而且 Linux 平臺(tái)上的服務(wù)軟件也是越來越多了。本課題為減輕系統(tǒng)管理員的工作量而提供 了一些簡單的系統(tǒng)服務(wù)的管理和查看工具。Socket 目 錄 論文總頁數(shù): 33 頁 1 引言 ......................................................................................................................................... 1 課題背景 ........................................................................................................................ 1 國內(nèi)外研究現(xiàn)狀 ............................................................................................................ 1 本課題研究的意義 .......................................
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1