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

正文內(nèi)容

h20xx032045_一種遠(yuǎn)程管理linux系統(tǒng)工具的設(shè)計(jì)與實(shí)現(xiàn)(編輯修改稿)

2024-10-11 07:31 本頁面
 

【文章內(nèi)容簡介】 ist *clist,gint row )。 與其他構(gòu)件一樣, GtkCList有一些信號供我們使用。 GtkCList構(gòu)件是從容器 構(gòu)件 GtkContainer派生的,它有容器所具有的一些信號,還有下面這些附加信號: 第 頁 共 33 頁 5 select_row:選中一行時引發(fā),該信號傳遞信息,依次是 GtkCList *clist、 gint row、 gint column、 GtkEventButton *event。 unselect_row:用戶對一行取消選擇,引發(fā)這個信號。傳遞的信息與上一個 信號一樣。 click_column:選中某一列時引發(fā),傳遞信息,依次是: GtkCList *clist、 gint column。所以,要將一個回調(diào)函數(shù)連接到 select_row信號上,回調(diào)函數(shù)應(yīng) 該像下面這樣: void select_row_callback(GtkWidget *widget,gint row,gint column, GdkEventButton *event,gpointer data)。 回調(diào)函數(shù)用下面的形式連接到信號: gtk_signal_connect(GTK_OBJECT( clist), select_row, GTK_SIGNAL_FUNC(select_row_callback), NULL)。 以 上只是簡單介紹了本課題在客戶端界面編寫的時候可用到的 GTK庫函數(shù), 但實(shí)際的 GTK比上面的操作還要復(fù)雜得多。 3 Linux 系統(tǒng)調(diào)用 Linux 系統(tǒng)文件 在 Linux 中最主要的資源就是文件,很多設(shè)備都是以文件形式存在的,所 以大多數(shù)輸入 /輸出都要通過文件讀寫來實(shí)現(xiàn)。也就是說通過一個單一的接口就 可以處理外圍設(shè)備和程序之間的通信。 Linux 文件類型常見的有:普通文件、 目錄、字符設(shè)備文件、塊設(shè)備文件、符號鏈接文件等。很多系統(tǒng)服務(wù)和應(yīng)用服 務(wù)的配置文件都是以普通文件的形式存在 ,這些文件很容易通過 Linux 的系統(tǒng) 調(diào)用來配置和修改,也可以用文檔文件的修改方式來修改。 如何從文件中讀取數(shù)據(jù) Linux 文件讀取有兩種方法:一種是通過 C 語言的標(biāo)準(zhǔn)庫函數(shù)調(diào)用來完成; 另一種是通過對 Linux 的系統(tǒng)調(diào)用來完成。文件讀取分 3 步完成:第一步是打 開要讀取的文件;第二步是把文件讀取到內(nèi)存中去;第三步是關(guān)閉打開的文件。 l 在 Linux中打開一個文件可以通過系統(tǒng)調(diào)用 open()函數(shù)來實(shí)現(xiàn): int fd = open(char *name,int how)。 其中參數(shù) name 是要打開的函數(shù)名字; how 是打開的方式;返回值 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)。 第 頁 共 33 頁 6 第 1個參數(shù)是打開的文件描述符,第 2 個參數(shù)是存儲文件數(shù)據(jù)的內(nèi)存地址, 第 3個參數(shù)是讀取數(shù)據(jù)大小。如果讀取成功返回值是讀取的字節(jié)數(shù),失敗就返 回 1。 l 系統(tǒng)調(diào)用 write()函數(shù)將內(nèi)存中的數(shù)據(jù)寫入到文件中去,函數(shù)原形: ssize_t resut = write(int fd,void *buff,zize_t amt)。 這個系統(tǒng)將調(diào)用 buff的數(shù)據(jù)寫到文件中。第 1個參數(shù)是打開的文件描述符; 第 2個參數(shù)是要 寫入文件數(shù)據(jù)的內(nèi)存地址;第 3 個參數(shù)是寫入文件的大小。 進(jìn)程不需要再對文件進(jìn)行讀寫操作時,就要關(guān)系文件打開的文件。 close() 能關(guān)閉打開的文件,其函數(shù)原形: int result = close(int fd)。 這個系統(tǒng)調(diào)用會關(guān)閉進(jìn)程和文件之間的連接。參數(shù)是打開的文件描述符號。 關(guān)閉成功返回 0,失敗返回 1。 進(jìn)程和線程的使用 (1) Linux 進(jìn)程 Linux 進(jìn)程創(chuàng)建很特別。很多其他操作都提供了產(chǎn)生進(jìn)程的機(jī)制,在新的 進(jìn)程空間中創(chuàng)建進(jìn)程,讀取可執(zhí)行文件。但是 Linux 不同,它創(chuàng)建的子進(jìn)程具 有和父進(jìn)程相同的數(shù)據(jù)、代碼段。父進(jìn)程和子進(jìn)程間的區(qū)別就是進(jìn)程的 pid 不 同,其他的都一樣: pid_t result = fork(void) 該函數(shù)比較特殊,它返回兩次函數(shù)值,一次返回值是向父進(jìn)程返回子進(jìn)程 的 PID。還有一次是返回 0(子進(jìn)程 )。 在使用 fork()函數(shù)創(chuàng)建進(jìn)程的時候經(jīng)常父進(jìn)程等待子進(jìn)程結(jié)束。系統(tǒng)調(diào)用 wait(amp。status)讓父進(jìn)程阻塞直到子進(jìn)程結(jié)束: pid_t result = wait(amp。status)。 (2) Linux 線程 進(jìn)程為線程提供了運(yùn)行環(huán)境,多個函數(shù)可以同時運(yùn)行,但是他們都是運(yùn)行 在相同的進(jìn)程中的。 pthread_cearte()函數(shù)可以創(chuàng)建一個線程: int pthread_ceate(pthread_t *thread, pthread_attr_t *attr, void *(*func)(void*), void *arg)。 4 基本的套接口編程 概述 讓同一網(wǎng)絡(luò)的不同計(jì)算機(jī)的進(jìn)程能夠相互通信,首先要確定這些程序如何 第 頁 共 33 頁 7 進(jìn)行通信。本課題所用的協(xié)議是 TCP/IP 協(xié)議。如果客戶和服務(wù)器處于同一以太 網(wǎng),如圖 1 所示。 應(yīng)用層協(xié)議 客戶應(yīng)用程序 服務(wù)器應(yīng)用程序 TCP TCP 協(xié)議 TCP IP IP 協(xié)議 IP 以太網(wǎng)驅(qū)動 以太網(wǎng)協(xié)議 以太網(wǎng)驅(qū)動 圖 1 網(wǎng)絡(luò)示意圖 簡單的網(wǎng)絡(luò)編程 (1) socket 函數(shù) socket 函數(shù)功能是創(chuàng)建一個套接口描述符,并且指定希望的通信 協(xié)議 (使 用 IPV4 的 TCP,或者使用 IPV6 的 UPD 等 )。 int socket(int family,int type,int protocol)。 其中 family 參數(shù)指明協(xié)議族, type 參數(shù)指明套接口類型, protocol 參數(shù) 為某個協(xié)議的常數(shù)。函數(shù)調(diào)用成功時候返回一個非負(fù)的描述符。 (2) connect 函數(shù) TCP 客戶程序用 connect 函數(shù)來發(fā)起和 TCP 服務(wù)程序的連接。這個函數(shù)通 常是在客戶程序中使用。 int connect(int sockfd, const sgruct sockaddr *servaddr, socklen_t addrlen)。 sockfd 是有 socket 函數(shù)返回的一個套接口描述符,第 2 個和第 3 個參數(shù) 分別是一個指向套接口地址結(jié)構(gòu)指針和結(jié)構(gòu)的大小。當(dāng)函數(shù)調(diào)用成功的時候返 回 0,出錯就返回 1。 (3) bind 函數(shù) 該函數(shù)是把一個本地協(xié)議地址賦予一個套接口,對于網(wǎng)際協(xié)議,協(xié)議地址 是一個 32 位的 IPV4 地址和一個 16 位的 TCP 端口號的組合。 int bind(int sockfd,const struct aockaddr *myadd,socklen_t addrlen)。 第 頁 共 33 頁 8 第 2個參數(shù)是一個指向特定協(xié)議的地址結(jié)構(gòu)的指針,第 3 個參數(shù)是該地址 結(jié)構(gòu)的長度。調(diào)用成功返回 0,錯誤返回 1。 (4) listen 函數(shù) listen 函數(shù)只能由 TCP 服務(wù)器調(diào)用,他完成兩件事: 一是當(dāng) socket 函數(shù)創(chuàng)建一個套接口時它是一個主動的套接口,該函數(shù)就是 把它轉(zhuǎn)換成一個被動的套接口 二是該函數(shù)規(guī)定了為相應(yīng)套接口排隊(duì)的最大的連接個數(shù)。 int listen(int sockfd,int backlog)。 本函數(shù)通常都是在調(diào)用 socket 和 bind 這兩個函數(shù)之后。 (5) accept 函數(shù) int accept(int sockfd,struct sockaddr *cliaddr,socklen_t *addrlen)。 參數(shù) cliaddr 和 addrlen 用來返回已經(jīng)連接的客戶端的協(xié)議地址。函數(shù)返 回值為一個非負(fù)的描述符表示成功,出錯為 1。 這里需要指出的是參數(shù)的描述符為監(jiān)聽套接口,就是 在等待連接的時候還 沒有建立連接的套接口,而返回值是連接的新的套接口。也就是能和客戶端通 信的套接口。區(qū)分這兩個東西是很重要的。 (6)close 函數(shù) 套接口編程通常都需要一個 close 函數(shù)來關(guān)閉套接口 ,來中斷 TCP 的連接。 int close(int sockfd)。 (7)send()函數(shù) 當(dāng)連接建立了后自然就需要數(shù)據(jù)的傳送和接收, send()函數(shù)是用來想連接 的另外一端發(fā)送數(shù)據(jù)。 int send(int sockfd,void *buf,int len,int flags)。 第 1個參數(shù)是已經(jīng)連接的套接口的描述符,第 2 個參數(shù)是發(fā)送的數(shù)據(jù)的內(nèi) 存地址,第 3 個參數(shù)是發(fā)送數(shù)據(jù)的大小,第 4 個參數(shù)是選項(xiàng)。 (8)recv()函數(shù) 數(shù)據(jù)發(fā)送到接收端了后,就可以用 recv()函數(shù)來接收由發(fā)送端發(fā)送過來的 數(shù)據(jù)了。 int recv(int sockfd,void *buf,int len,int flags) 第 1個參數(shù)是已經(jīng)連接的套接口的描述符,第 2 個參 數(shù)是發(fā)送的數(shù)據(jù)的內(nèi) 存地址,第 3 個參數(shù)是發(fā)送數(shù)據(jù)的大小,第 4 個參數(shù)是選項(xiàng)。 第 頁 共 33 頁 9 5 程序設(shè)計(jì)和流程圖 設(shè)計(jì)思路 本課題是采用 C/S 模式??蛻舫绦蚬δ苁墙缑娴木帉?,并和服務(wù)程序通信。 采用 GTK 編寫界面,采用 Sock 編程實(shí)現(xiàn)通信。服務(wù)器程序功能是接收客戶程序 的數(shù)據(jù),并且通過收到的數(shù)據(jù)來完成系統(tǒng)或應(yīng)用服務(wù)程序文件的配置。在 Linux 中服務(wù)配置文件主要是以文本文件的形式存在的,所以通過 Linux 系統(tǒng)調(diào)用很 容易修改配置文件,流程如圖 2。 main() 等待連接 輸入服務(wù) 器 IP 建立連接( TCP3 次握手) 連接界面 連接 成功 連接不成功 初始化數(shù)據(jù) TCP 接口 用戶主界面 用戶操作 否 TCP 接口 退出 處理 請求 退出 是 結(jié)束 結(jié)束 圖 2 程序總體流程 服務(wù)程序 流程設(shè)計(jì) 服務(wù)程序功能有兩個:一是監(jiān)聽端口,接收數(shù)據(jù)和向客戶程序發(fā)送數(shù)據(jù); 二是根據(jù)客戶程序發(fā)送過來的數(shù)據(jù)對文件修改,其流程圖如圖 3 所示。 圖 3顯示了服務(wù)程序的流程, accept()是監(jiān)聽端口,等待客戶程序的連接, 連接 建立好后 init_cli()函數(shù)從配置文件讀取服務(wù)器的當(dāng)前配置文件數(shù) 據(jù),然后再發(fā)送到客戶程序,讓客戶程序通過這些數(shù)據(jù)來初始化界面。然后再 接收客戶程序的數(shù)據(jù) (流程控制字符串 ),通過判斷字符串來控制服務(wù)程序的流 程 (圖 3 中的虛線部分 )。 第 10 頁 共 33 頁 程序入口 sock() bind() listen() accep() 一直阻塞到 客戶連接到 達(dá) 連接建立 TCP3 次握 手 init_cli () close () recv () 字符串 對字符 判斷處理 判斷 user group sysconfig dnsconfig apachecon exit vsftpcon user_control() InitAction () group_control() Apache_Config () Net_DNS_Config () Ftp_Config () 圖 3 服務(wù)程序的流程圖 功能模塊 (1) 系統(tǒng)用戶管理操作 和客戶程序建立了連接,并且收到了 user 字符串后,服務(wù)程序進(jìn)入系統(tǒng)用 戶管理操作模塊,接著接收客戶程序發(fā)送過來的數(shù)據(jù) (字符串 ),通過數(shù)據(jù)來判 斷是對用戶的添加、刪除、瀏覽或修改操作。接收到了 adduser字符串就進(jìn) 入添加用戶流程;接收到 deluser字符串就進(jìn)入刪除用戶流程;接收到 scanuser字符串就進(jìn)入了瀏覽用戶流程;接收到 property字符串就進(jìn) 入到了修改用戶流程,系統(tǒng)用戶管理操作流程如圖 4 所示。 第 11 頁 共 33 頁 user_control() recv()
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1