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

正文內(nèi)容

一種遠程管理linux系統(tǒng)工具的設計與實現(xiàn)—免費計算機(編輯修改稿)

2025-01-11 01:34 本頁面
 

【文章內(nèi)容簡介】 文件的修改方式來修改。 如何從文件中讀取數(shù)據(jù) Linux 文件讀取有兩種方法: 一種是通過 C 語言的標準庫函數(shù)調(diào)用來完成;另一種是通過對 Linux的系統(tǒng)調(diào)用來完成。文件讀取分 3步完成:第一步是打開要讀取的文件;第二步是把文件讀取到內(nèi)存中去;第三步是關閉打開的文件。 ? 在 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ù)是寫入文件的大小。 進程不需要再對文件進行讀寫操作時,就要關系文件打開的文件。 close()能關閉打開的文件,其函數(shù)原形: int result = close(int fd)。 第 7 頁 共 33 頁 這個系統(tǒng)調(diào)用會關閉進程和文件之間的連接。參數(shù)是打開的文件描述符號。關閉成功返回 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)常父進程等待子進程結束。系統(tǒng)調(diào)用wait(amp。status)讓父進程阻塞直到子進程結束: 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)絡的不同計算機的進程能夠相互通信,首先要確定這些程序如何進行通信。本課題所用的協(xié)議是 TCP/IP協(xié)議 。如果客戶和服務器處于同一 以太網(wǎng),如圖 1所示。 應 用層協(xié)議 客戶應用程序 服務器應用程序 TCP TCP IP IP 以太網(wǎng)驅(qū)動 以太網(wǎng)驅(qū)動 以太網(wǎng)驅(qū)動 TCP 協(xié)議 IP 協(xié)議 以太網(wǎng)協(xié)議 第 8 頁 共 33 頁 圖 1 網(wǎng)絡示意圖 簡單的網(wǎng)絡編程 (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 服務程序的連接。這個函數(shù)通常是在客戶程序中使用。 int connect(int sockfd, const sgruct sockaddr *servaddr, socklen_t addrlen)。 sockfd 是有 socket函數(shù)返回的一個套接口描述符,第 2 個和第 3 個參數(shù)分別是一個指向套接口地址結構指針和結構的大小。當函數(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)。 第 2個參數(shù)是一個指向特定協(xié)議的地址結構的指針,第 3個參數(shù)是該地址結構的長度。調(diào)用成功返回 0,錯誤返回 1。 (4) listen函數(shù) listen函數(shù)只能由 TCP服務器調(diào)用,他完成兩件事: 一是當 socket函數(shù)創(chuàng)建一個套接口時它是一個主動的套接口,該函數(shù)就是把它轉換成一個被動的套接口 二是該函數(shù)規(guī)定了為相應套接口排隊的最大的連接個數(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)聽套接口,就是在等待連接的時候還沒有建立連 第 9 頁 共 33 頁 接的套接口,而返回值是連接的新的套接口。也就是能和客戶端通信的套接口。區(qū)分這兩個東西是很重要的。 (6)close函數(shù) 套接口編程通常都需要一個 close函數(shù)來關閉套接口 ,來中斷 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 程序設計和流程圖 設計思路 本課題是采用 C/S 模式??蛻舫绦蚬δ苁墙缑娴木帉?,并和服務程序通信。采用 GTK編寫界面,采用 Sock編程實現(xiàn)通信。服務器程序功能是接收客戶程序的數(shù)據(jù),并且通過收到的數(shù)據(jù)來完成系統(tǒng)或應用服務程序文件的配置。在 Linux中服務配置文件主要是以文本文件的形式存在的,所以通過 Linux系統(tǒng)調(diào)用很容易修改配置文件,流程如圖 2。 處理 請求 否 是 初始化數(shù)據(jù) 退出 連接不成功 main() 連接界面 輸入服務器 IP 建立連接( TCP3 次握手) 用戶主界面 用戶操作 等待連接 TCP 接口 退出 TCP 接口 結束 結束 連接成功 第 10 頁 共 33 頁 圖 2 程序總體流程 服務程序 流程設計 服務程序功能有兩個:一是監(jiān)聽端口,接收數(shù)據(jù)和向客戶程序發(fā)送數(shù)據(jù);二是根據(jù)客戶程序發(fā)送過來的數(shù)據(jù)對文件修改,其流程圖如圖 3所示。 圖 3顯示了服務程序的流程, accept()是監(jiān)聽端口,等待客戶程序的連接,連接建立好后 init_cli()函數(shù)從配置文件讀取服務器的當前配置文件數(shù)據(jù),然后再發(fā)送到客戶程序, 讓客戶程序通過這些數(shù)據(jù)來初始化界面。然后再接收客戶程序的數(shù)據(jù) (流程控制字符串 ),通過判斷字符串來控制服務程序的流程 (圖 3中的虛線部分 )。 第 11 頁 共 33 頁 圖 3 服務程序的流程圖 功能模塊 (1) 系統(tǒng)用戶管理操作 和客戶程序建立了連接,并且收到了 user字符串后,服務程序進入系統(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() 字符串 判斷處理 第 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文件來實現(xiàn)。 /etc/passwd的用戶都是按照統(tǒng)一存格式來存儲,格式舉例如下: terrycheops:x:500:500:terrycheop:/home/terrycheops:/bin/bash 存儲中每個字段都用“:”隔開的,第一字段:用戶名(也被稱為登錄名),在上面的例子中,我們看到用戶的用戶名是 terrycheops;第二字段:口令,在例子中我們看到的是一個 x,其實密碼已被映射到 /etc/shadow 文件中;第三字段:用戶的 ID;第四字段:用戶組的 ID;第五字段:用戶名全 稱,可選項;第六字段:用戶的家目錄所在位置,該用戶的是/home/terrycheops。第七字段:用戶所用 Shell的類型,一般設置為 /bin/bash。 程序進入到了添加用戶后,接收客戶程序傳過來要添加的用戶信息 (用戶名、密碼、全名 )。把客戶程序發(fā)送過來的用戶密碼用 MD5算法加密,把加密后的
點擊復制文檔內(nèi)容
研究報告相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1