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ī)-文庫吧資料

2024-12-14 01:34本頁面
  

【正文】 量 (str)寫到文件中,這樣就實(shí)現(xiàn)了用戶的添加。把客戶程序發(fā)送過來的用戶密碼用 MD5算法加密,把加密后的密碼和用戶其他數(shù)據(jù)按照 /etc/passwd 的格式復(fù)制到字符串變量 (str)中。第七字段:用戶所用 Shell的類型,一般設(shè)置為 /bin/bash。 dnsconfig vsftpcon group_control() InitAction () Net_DNS_Config () Apache_Config () Ftp_Config () sysconfig apachecon group 程序入口 sock() bind() listen() accep() t() 一直阻塞到客戶連接到達(dá) 連接建立 TCP3 次握手 init_cli () user recv () 對字符 判斷 exit close () user_control() 字符串 判斷處理 第 12 頁 共 33 頁 圖 4 用戶操作流程 對用戶的操作是添加、刪除和修改用戶, Linux用戶都是記錄在 /etc/passwd文件中,把 temp 的數(shù)據(jù)fputs()到文件 退出用戶操作到圖 3 的 recv() exit adduser scauser property fclose() fopen() 把 temp 中的數(shù)據(jù) fputs()到文件中 fputs(str) fopen() 是 否 否 是 把 temp 中的數(shù)據(jù) fputs()到文件中 把讀取數(shù)據(jù)存到 2 維數(shù)組 temp中 把 str存到 2維數(shù)組 temp 中 fclose() fopen() 相同 接收的字符和讀取字符 不同 否 為空 把讀取數(shù)據(jù)存到 2 維數(shù)組temp 中 fopen() fget() 為空 fopen() 把接受的數(shù)據(jù)格式化存儲在字符串 str 中 fclose() 把接受的數(shù)據(jù)格式化存儲在字符串 str 中 fopen() fget() user_control() recv() 字符 recv() recv() recv() fopen() fget() send() fget() 為空 相同 把讀取數(shù)據(jù)存到 2 維數(shù)組temp 中 接收的字符和讀取字符 不同 第 13 頁 共 33 頁 對用戶添加、刪除和修改都是通過修改 /etc/passwd文件來實(shí)現(xiàn)。 第 11 頁 共 33 頁 圖 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)通信。 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í)候還沒有建立連 第 9 頁 共 33 頁 接的套接口,而返回值是連接的新的套接口。 參數(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ù)。 第 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端口號的組合。 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)程能夠相互通信,首先要確定這些程序如何進(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。 第 7 頁 共 33 頁 這個(gè)系統(tǒng)調(diào)用會關(guān)閉進(jìn)程和文件之間的連接。 進(jìn)程不需要再對文件進(jìn)行讀寫操作時(shí),就要關(guān)系文件打開的文件。 這個(gè)系統(tǒng)將調(diào)用 buff的數(shù)據(jù)寫到文件中。如果讀取成功返回值是讀取的字節(jié)數(shù),失敗就返回 1。 ? 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)。 ? 在 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è)備文件、符號鏈接文件等 。 3 Linux 系統(tǒng)調(diào)用 Linux 系統(tǒng)文件 在 Linux中最主要的資源就是文件,很多設(shè)備都是以文件形式存在的,所以大多數(shù)輸入 /輸出都要通過文件讀寫來實(shí)現(xiàn)。 回調(diào)函數(shù)用下面的形式連接到信號: 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è)信號。 與其他構(gòu)件一樣, GtkCList有一些信號供我們使用。 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)簽。 第 5 頁 共 33 頁 向筆記本構(gòu)件中添加頁面,主要有兩種方法,而且非常相似的,如下: ? 在筆記本構(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)件 GtkNotebook(筆記本構(gòu)件 )是互相重疊的頁面集合,每一頁都包含不同的信息,且一次只有一個(gè)頁面是可見的。如果需要,新字符串所需的空間會做自動(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ā)信號。 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ù)可以作如下聲明: 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ù)與信號的回調(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è)操作,我們需要 寫一 段信號處理程序,以捕獲它的信號,然后調(diào)用相應(yīng)的回調(diào)函數(shù)。一旦事件發(fā)生,比如鼠標(biāo)器按鈕被按下,被按下的構(gòu)件(按鈕)將引發(fā)適當(dāng)?shù)男盘枴? 第 2 頁 共 33 頁 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)
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1