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

正文內(nèi)容

大學(xué)計算機專業(yè)-一種遠程管理linux系統(tǒng)工具的設(shè)計與實現(xiàn)設(shè)計與實現(xiàn)(編輯修改稿)

2025-01-08 17:00 本頁面
 

【文章內(nèi)容簡介】 是通過 C 語言的 標準庫函數(shù) 調(diào)用 來 完成 ;另 一種是 通過對 Linux 的系統(tǒng)調(diào)用來完成。 文件讀取分 3 步完成: 第一步是 打開要讀取的文件; 第二步是 把文件讀取到內(nèi)存中去; 第三步是 關(guān)閉打開的文件。 ? 在 Linux 中打開一個文件可以通過系統(tǒng)調(diào)用 open()函數(shù)來實現(xiàn) : int fd = open(char *name,int how)。 其中 參數(shù) name 是要打開的函數(shù)名字 ; how 是打開的方式;返回值 1 為 錯誤,成功就返回一個文件描述符。 ? Linux 系統(tǒng) 讀取文件內(nèi)容通過系統(tǒng)調(diào)用 read()函數(shù)來實現(xiàn),函數(shù)原形 : ssize_t numread = read(int fd,void *buff,size_t qty)。 第 1個參數(shù)是打開的文件描述符,第 2個參數(shù)是存儲文件數(shù)據(jù)的內(nèi)存 地址 ,第 3 個參數(shù)是讀取數(shù)據(jù)大小。 如果讀取 成功返回值是讀取的字節(jié)數(shù),失敗就 返回 1。 ? 系統(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ù)是寫入文件的大小。 進程不 需要 再 對文件進行讀寫操作時,就要關(guān)系文件 打開的文件。 close()能關(guān)閉打開的文件,其函數(shù)原形 : int result = close(int fd)。 這個系統(tǒng)調(diào)用會關(guān)閉進程和文件之間的連接。 參數(shù)是打開的文件描述符號 。關(guān)閉成功返回 0,失敗返回 1。 進程和線程的 使用 (1) Linux 進程 Linux 進程創(chuàng)建很特別。很多其他操作都提供了產(chǎn)生進程的機制 ,在新的進程空間中創(chuàng)建進程,讀取可 執(zhí)行文 件 。 但是 Linux 不同, 它 創(chuàng)建的子進程 具有和父進程相同的數(shù)據(jù)、代碼段 。 父進程和子進程間的區(qū)別就是進程的 pid 不同,其他的都一樣 : pid_t result = fork(void) 該函數(shù)比較特殊,它返回兩次 函數(shù)值 ,一次返回值是 向 父進程返回 子進程的 PID。還有一次是返回 0(子進程 )。 在使用 fork()函數(shù)創(chuàng)建進程的時候經(jīng)常 父進程等待子進程 結(jié)束。 系統(tǒng)調(diào)用wait(amp。status)讓父進程阻塞直到 子進程結(jié)束 : pid_t result = wait(amp。status)。 (2) Linux 線程 進程為線程提供了 運行 環(huán)境 ,多個函數(shù)可以同時運行,但是他們都是運行在相同的進程中的。 pthread_cearte()函數(shù) 可以 創(chuàng)建一個線程: int pthread_ceate(pthread_t *thread, pthread_attr_t *attr, void *(*func)(void*), void *arg)。 4 基本的套接口編程 概述 讓同一網(wǎng)絡(luò)的不同計算機的進程能夠相互通信,首先要確定這些程序如何進行通信 。 本課題所用的協(xié)議是 TCP/IP 協(xié)議 。如果客戶和服務(wù)器處于同一 以太網(wǎng), 如圖 1所示 。 圖 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)用成功時候返回一個非負的描述符。 (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)的大小。 當函數(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)。 應(yīng)用層協(xié)議 客戶應(yīng)用程序 服務(wù)器應(yīng)用程序 TCP TCP IP IP 以太網(wǎng)驅(qū)動 以太網(wǎng)驅(qū)動 以太網(wǎng)驅(qū)動 TCP 協(xié)議 IP 協(xié)議 以太網(wǎng)協(xié)議 第 2個參數(shù)是一個指向特定 協(xié)議的地址結(jié)構(gòu)的指針, 第 3個參數(shù)是該地址結(jié)構(gòu) 的 長度。 調(diào)用成功返回 0,錯誤返回 1。 (4) listen 函數(shù) listen 函數(shù)只能 由 TCP 服務(wù)器調(diào)用,他完成兩 件事 : 一是 當 socket 函數(shù)創(chuàng)建一個套接口 時 它是一個主動的套接口,該函數(shù)就是把它轉(zhuǎn)換成一個被動的套接口 二是 該函數(shù)規(guī)定了為相應(yīng)套接口排隊的最大的連接個數(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ù)返回值 為一個非負的描述符 表示成功 , 出錯為 1。 這里需要指出的是參數(shù)的描述符為監(jiān)聽套接口,就是在等待連接的時候還沒有建立連接的套接口,而返回值是連接的 新的 套接口 。 也就是 能和客戶端通信的套接口。 區(qū)分這兩個東西是很重要的。 (6)close 函數(shù) 套接口編程通常都需要一個 close 函數(shù)來關(guān)閉套接口 ,來中斷 TCP 的連接。 int close(int sockfd)。 (7)send()函數(shù) 當連接建立了后自然就需要數(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ù)是選項。 (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ù)是選項。 5 程序設(shè)計和流程圖 設(shè)計思路 本課題是采用 C/S 模式 。 客戶程序 功能 是 界面的編寫 ,并 和服務(wù)程序通信。采用 GTK 編寫 界面, 采用 Sock 編程實現(xiàn) 通信 。 服務(wù)器程序 功能 是 接收客戶程序的數(shù)據(jù),并且通過收到的數(shù)據(jù) 來 完成 系統(tǒng)或 應(yīng)用 服務(wù)程序文件的 配置。 在 Linux中服務(wù) 配置文件 主要是以文本 文件的形式存在的,所以 通過 Linux 系統(tǒng)調(diào)用很容易 修改配置文件 , 流程如圖 2。 圖 2 程序總體流程 服務(wù)程序 流程設(shè)計 服務(wù)程序功能有兩個:一是監(jiān)聽端口,接收數(shù)據(jù)和向客戶程序發(fā)送數(shù)據(jù) ;二是根據(jù)客戶程序發(fā)送過來的數(shù)據(jù)對文件修改 , 其流程圖如圖 3所示 。 圖 3顯示了服務(wù)程序的流程, accept()是監(jiān)聽端口,等待客戶程序的 連接,連接建立好 后 init_cli()函數(shù)從配置文件讀 取 服務(wù)器的當前 配置文件 數(shù)據(jù),然后再 發(fā)送到客戶程序,讓客戶程序通過這些 數(shù)據(jù) 來初始化界面。 然后再接收客戶程序的 數(shù)據(jù) (流程控制字符串 ),通過判斷字符串來控制服務(wù)程序的流程 (圖 3中的虛線部分 )。 處理 請求 否 是 初始化數(shù)據(jù) 退出 連 接不成功 main() 連接界面 輸入服務(wù)器 IP 建立連接( TCP3 次握手) 用戶主界面 用戶操作 等待連接 TCP 接口 退出 TCP 接口 結(jié)束 結(jié)束 連接成功 圖 3 服務(wù)程序的流程圖 功能模塊 (1) 系統(tǒng) 用戶 管理 操作 和客戶程序建立 了 連接,并且收到了 user 字符串后 , 服務(wù)程序 進入系統(tǒng) 用戶 管理 操作模塊 , 接著 接收 客戶程序發(fā)送過來的數(shù)據(jù) (字符串 ),通過數(shù)據(jù)來判斷 是對用戶 的添加、刪除、瀏覽或 修改操作 。 接收到了“ adduser”字符串就進入添加 用戶 流程;接收到“ deluser”字符串就進入刪除 用戶 流程;接收到“ scanuser”字符串就進入了瀏覽 用戶 流程;接收到 “ property”字符串就進入到了修改 用戶 流程 ,系統(tǒng) 用戶 管理 操作流程如圖 4所示 。 dnsconfig vsftpcon group_control() InitAction () Net_DNS_Config () Apache_Config () Ftp_Config () sysconfig apachecon group 程序入口 sock() bind() listen() accep() t() 一直阻塞到客戶連接到達 連接建立 TCP3 次握手 init_cli () user recv () 對字符 判斷 exit close () user_control() 字符串 判斷處理 圖 4 用戶操作流程 對 用戶的操作是添加、刪除和修改用戶, Linux 用戶都 是記錄在把 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 中 接收的字符和讀取字符 不同 /etc/passwd 文件 中, 對用戶添加、刪除和修改都是 通過修改 /etc/passwd 文件來實現(xiàn)。 /etc/passwd 的用戶都是按照統(tǒng)一 存 格式來存儲,格式舉例如下 : terrycheops:x:500:500:terrycheop:/home/terrycheops:/bin/bash 存儲中每個字段都用 “ : ” 隔開的, 第一字段:用戶名(也被稱為登錄名),在上面的例子中,我們看到用戶的用戶名是 terrycheops; 第二字段:口令,在例子中我們看到的是一個 x,其實密碼已被映射到 /etc/shadow 文件中 ; 第三字段:用戶的 ID; 第四字段:用戶組的 ID;第五字段:用戶名全稱,可選 項; 第六字段:用戶的家目錄所在位置, 該 用戶 的 是 /home/terrycheops。第七字段:用戶所用 Shell的類型,一般設(shè)置為 /bin/bash。 程序進入到了添
點擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1