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-09-06 11:23本頁面
  

【正文】 把二維數(shù)組(temp)中的數(shù)據(jù)以流的形式再寫入到文件/etc/passwd 中,這樣就完成了修改用戶的操作當(dāng)進(jìn)入瀏覽用戶的流程后,打開/etc/passwd 文件,把文件的數(shù)據(jù)讀取到 buff 中,再關(guān)閉文件,把 buff 的數(shù)據(jù)發(fā)送的到客戶程序,讓客戶程序顯示當(dāng)前的用戶信息。以 C 語言中流的操作打開并且讀取文件/etc/passwd 的數(shù)據(jù),判斷讀取的數(shù)據(jù),當(dāng)要修改的用戶名和讀取的用戶名一致時(shí)把 str 數(shù)據(jù)復(fù)制到二維數(shù)組(temp);讀取用戶名和修改的用戶名不一致時(shí)就把讀取數(shù)據(jù)復(fù)制到 temp 中。重新以寫文件的操作打開文件/etc/passwd,然后把二維數(shù)組(temp)中的數(shù)據(jù)的以流的形式在寫入到文件/etc/passwd 中,這樣就實(shí)現(xiàn)了用戶的刪除。用 C 中流的操作打開文件/etc/passwd,判斷讀取的數(shù)據(jù),當(dāng)要?jiǎng)h除的用戶名和讀取的用戶名一致時(shí)就不把這個(gè)用戶信息復(fù)制到二維數(shù)組(temp);讀取用戶名和刪除用戶名不一樣就把讀取數(shù)據(jù)復(fù)制到 temp 中。再以寫的形式打開文件,然后把上面二維數(shù)組(temp)的內(nèi)容寫到文件中,最后再把變量(str)寫到文件中,這樣就實(shí)現(xiàn)了用戶的添加。把客戶程序發(fā)送過來的用戶密碼用 MD5 算法加密,把加密后的密碼和用戶其他數(shù)據(jù)按照/etc/passwd 的格式復(fù)制到字符串變量(str)中。第七字段:用戶所用Shell的類型,一般設(shè)置為/bin/bash。dnsconfig vsftpcongroup_control()InitAction ()Net_DNS_Config ()Apache_Config ()Ftp_Config ()sysconfig apachecongroup程序入口sock()bind()listen()accep()t()一直阻塞到客戶連接到達(dá)連接建立TCP3 次握手init_cli ()userrecv ()對字符判斷exitclose ()user_control()字符串判斷處理圖 4 用戶操作流程對用戶的操作是添加、刪除和修改用戶,Linux 用戶都是記錄在/etc/passwd 文件中,把 temp 的數(shù)據(jù)fputs()到文件退出用戶操作到圖 3 的 recv()exitadduser scauserpropertyfclose()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ù)格式化存儲(chǔ)在字符串str 中fclose()把接受的數(shù)據(jù)格式化存儲(chǔ)在字符串str 中fopen()fget()user_control()recv()字符recv() recv() recv()fopen()fget() send()fget()為空相同把讀取數(shù)據(jù)存到 2 維數(shù)組temp 中接收的字符和讀取字符不同對用戶添加、刪除和修改都是通過修改/etc/passwd 文件來實(shí)現(xiàn)。結(jié)束結(jié)束圖 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í)候還沒有建立連接的套接口,而返回值是連接的新的套接口。參數(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。這個(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。? 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)镚tkCList可以有多列,因而在創(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)件中添加頁面,主要有兩種方法,而且非常相似的,如下:? 在筆記本構(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è)頁面是可見的。如果需要,新字符串所需的空間會(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ā)信號。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)件)允許多行顯示或編輯文本??梢杂胓tk_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ù)男盘枴TK 是一個(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ù)雜的
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1