亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Linux的FTP服務(wù)器設(shè)計(jì)

        2022-11-16 23:48:59陳麗瓊
        無(wú)線(xiàn)互聯(lián)科技 2022年3期
        關(guān)鍵詞:進(jìn)程用戶(hù)

        朱 澳,陳麗瓊

        (湖南科技學(xué)院 智能制造學(xué)院,湖南 永州 425199)

        1 背景及意義

        Windows系統(tǒng)上的FTP服務(wù)器軟件雖然種類(lèi)很多,但是大部分都是需要付費(fèi)使用的,許多軟件就算付費(fèi)也有許多問(wèn)題存在。而在Linux上,利用shell命令使用FTP服務(wù)器,能讓FTP的使用極為方便簡(jiǎn)潔。在Linux上,它們是可以完全免費(fèi)使用的,比如vsftpd。開(kāi)發(fā)一個(gè)基于Linux的FTP服務(wù)器具有重要的意義[1]。

        2 需求分析

        本FTP服務(wù)器的主要模塊包括登錄模塊、文件目錄操作模塊、文件操作模塊、文件傳輸模塊、工作模式和下載模塊。登錄模塊包括本地用戶(hù)直接登錄和用戶(hù)匿名登錄兩種方式。匿名用戶(hù)登錄時(shí)應(yīng)注意控制在當(dāng)前目錄下,但只有在客戶(hù)端才能出現(xiàn)在根目錄下。登錄用戶(hù)模式下的用戶(hù)名必須是在Linux環(huán)境下運(yùn)行的用戶(hù),如果不是Linux環(huán)境下運(yùn)行的用戶(hù),登錄時(shí)會(huì)提示出錯(cuò)。原因是這種登錄模型的前提是讓Linux用戶(hù)判斷用戶(hù)名和登錄密碼的一致性和正確性。一些基本的目錄操作都是由文件目錄操作模塊來(lái)完成的。一般來(lái)說(shuō),文件目錄操作模塊包含了對(duì)目錄的刪除、目錄的重命名、特殊情況下的增加目錄操作等。以上所有的操作都必須是Linux用戶(hù),如果是一個(gè)匿名用戶(hù)將無(wú)法進(jìn)行上述操作[2]。其他與文件相關(guān)的操作一般同上述的目錄操作一起進(jìn)行,比如對(duì)文件進(jìn)行刪除和重命名等。只要是用戶(hù)在客戶(hù)端進(jìn)行的操作,都是屬于混合操作,那么客戶(hù)端的處理方式是將所有的這些混合操作轉(zhuǎn)化成命令傳輸?shù)椒?wù)器端。用戶(hù)要實(shí)現(xiàn)文件上傳或?qū)⑽募螺d到本地都需要使用文件傳輸模塊來(lái)實(shí)現(xiàn)。其中還有很重要的一個(gè)功能是斷點(diǎn)續(xù)傳。當(dāng)然,文件上傳和下載才是本文設(shè)計(jì)的服務(wù)器的最主要功能,也是同斷點(diǎn)續(xù)傳一樣有用的功能[3]。

        3 總體設(shè)計(jì)

        程序開(kāi)始執(zhí)行時(shí),從配置文件中讀取相關(guān)的內(nèi)容進(jìn)行初始化,如使用的連接方式、監(jiān)聽(tīng)的端口、監(jiān)聽(tīng)的服務(wù)器IP地址、支持連接的總IP數(shù)量等。然后,通過(guò)創(chuàng)建一個(gè)守護(hù)進(jìn)程來(lái)避免一些問(wèn)題的出現(xiàn),比如關(guān)于進(jìn)程暫停的問(wèn)題。創(chuàng)建一個(gè)守護(hù)進(jìn)程主要是進(jìn)行初始化操作,該操作主要是通過(guò)應(yīng)用共享內(nèi)存來(lái)實(shí)現(xiàn)。這里的處理既包括數(shù)據(jù)進(jìn)程的建立,也包括對(duì)進(jìn)程函數(shù)的調(diào)用。最后利用TCP協(xié)議創(chuàng)建Socket套接字來(lái)進(jìn)行監(jiān)聽(tīng),服務(wù)器接收客戶(hù)端并創(chuàng)建新的套接字。此過(guò)程需要?jiǎng)?chuàng)建一個(gè)子進(jìn)程來(lái)處理通信服務(wù)[4]。

        4 FTP服務(wù)器的實(shí)現(xiàn)

        4.1 進(jìn)程的啟動(dòng)

        基于epoll、半同步/半異步模型以及線(xiàn)程池的FTP服務(wù)器是采用配置文件的方式保存系統(tǒng)配置以及用戶(hù)信息的。該用戶(hù)信息包括用戶(hù)名、密碼、權(quán)限、工作目錄、日志文件等。服務(wù)器支持PASV被動(dòng)打開(kāi)方式進(jìn)行數(shù)據(jù)傳輸,支持?jǐn)帱c(diǎn)續(xù)傳與多用戶(hù)不同權(quán)限接入控制。線(xiàn)程池采用動(dòng)態(tài)創(chuàng)建與回收基制,其中線(xiàn)程池保存兩個(gè)隊(duì)列——工作線(xiàn)程隊(duì)列與空閑線(xiàn)程隊(duì)列。當(dāng)空閑隊(duì)列中線(xiàn)程數(shù)低于一個(gè)門(mén)限或高于一個(gè)門(mén)限時(shí),則分配或回收一部分線(xiàn)程,從而在保證系統(tǒng)高效性的前提下盡可能減小系統(tǒng)開(kāi)銷(xiāo)。

        整個(gè)系統(tǒng)的工作流程如下,系統(tǒng)啟動(dòng)后首先進(jìn)行資源分配,讀入配置文件,初始化線(xiàn)程池,初始化 epoll模型并開(kāi)啟監(jiān)聽(tīng);當(dāng)新用戶(hù)接入時(shí),進(jìn)行用戶(hù)接入驗(yàn)證,若合法則允許接入并把用戶(hù)消息保存到用戶(hù)管理對(duì)象中;當(dāng)新命令到達(dá)時(shí),把命令放入消息隊(duì)列中等待處理;系統(tǒng)開(kāi)啟若干個(gè)線(xiàn)程用來(lái)處理消息隊(duì)列中的消息,并使用信號(hào)進(jìn)行通知,一旦消息隊(duì)列非空時(shí),則會(huì)喚醒一個(gè)空閑線(xiàn)程;當(dāng)讀到“LIST”“STOR”“RETR”“REST”時(shí),說(shuō)明用戶(hù)準(zhǔn)備進(jìn)行數(shù)據(jù)傳輸,則在數(shù)據(jù)傳輸線(xiàn)程池中提取一個(gè)空閑線(xiàn)程,修改線(xiàn)程數(shù)據(jù)并放到工作線(xiàn)程中執(zhí)行,執(zhí)行完畢后由線(xiàn)程把結(jié)果狀態(tài)返回給用戶(hù)并從工作狀態(tài)進(jìn)入空閑狀態(tài)。用戶(hù)自接入成功一直處于命令交互狀態(tài),直到發(fā)送“QUIT”退出。

        4.2 守護(hù)進(jìn)程的實(shí)現(xiàn)

        首先,設(shè)計(jì)人員應(yīng)該打開(kāi)任務(wù)管理器,查看一下正在運(yùn)行的有哪些進(jìn)程。然后,逐一讀取出這些進(jìn)程的全路徑,將該全路徑與要守護(hù)的應(yīng)用程序的全路徑比對(duì)。如果一致,說(shuō)明要守護(hù)的應(yīng)用程序已開(kāi)啟了,此時(shí)要分配一條線(xiàn)程監(jiān)控該進(jìn)程句柄。當(dāng)該進(jìn)程句柄返回信息,說(shuō)明該進(jìn)程已關(guān)閉,此時(shí)釋放進(jìn)程句柄內(nèi)存,并重啟該進(jìn)程。如果遍歷任務(wù)管理進(jìn)程列表中所有進(jìn)程時(shí),沒(méi)有找到與要守護(hù)的應(yīng)用程序的全路徑一致的進(jìn)程,說(shuō)明要守護(hù)的應(yīng)用程序尚未打開(kāi),此時(shí)要啟動(dòng)該應(yīng)用程序,然后轉(zhuǎn)入監(jiān)控流程。另外,一定要額外分配線(xiàn)程去監(jiān)控要守護(hù)的應(yīng)用程序。因?yàn)槿绻?、使用主線(xiàn)程去執(zhí)行監(jiān)控任務(wù),會(huì)被長(zhǎng)期阻塞,直到進(jìn)程退出才會(huì)被激活,這樣就無(wú)法運(yùn)行后續(xù)程序。況且,監(jiān)控程序要實(shí)現(xiàn)持續(xù)監(jiān)控,必須避免死循環(huán),如果主線(xiàn)程進(jìn)入死循環(huán),則無(wú)法監(jiān)控其他要守護(hù)的進(jìn)程。創(chuàng)建守護(hù)進(jìn)程的關(guān)鍵步驟如下。

        4.2.1 后臺(tái)實(shí)現(xiàn)

        一般情況下,在后臺(tái)實(shí)現(xiàn)的第一步需要讓父進(jìn)程重新排隊(duì),而子進(jìn)程由用戶(hù)進(jìn)行創(chuàng)建。注意這時(shí)的父進(jìn)程稱(chēng)為一個(gè)孤兒進(jìn)程。而在守護(hù)進(jìn)程的終端,第一步將完成在shell終端的運(yùn)行。設(shè)計(jì)人員要守護(hù)進(jìn)程在后臺(tái)實(shí)現(xiàn),就必須讓守護(hù)進(jìn)程不被掛起,采用的方法是調(diào)用fork()函數(shù)讓父進(jìn)程結(jié)束,這樣守護(hù)進(jìn)程就會(huì)作為子進(jìn)程在后臺(tái)運(yùn)行。

        4.2.2 登錄會(huì)話(huà)和進(jìn)程組

        雖然守護(hù)可以在后臺(tái)運(yùn)行,但是調(diào)用fork()函數(shù)后產(chǎn)生的子進(jìn)程所擁有的資源是繼承父進(jìn)程而來(lái)的,包括進(jìn)程組、登錄會(huì)話(huà)、控制終端的這些資源是可以被系統(tǒng)收回的。為了能夠讓守護(hù)進(jìn)程不受控制,設(shè)計(jì)人員可以通過(guò)調(diào)用setsid()函數(shù)實(shí)現(xiàn)。setsid()函數(shù)的主要功能就是使進(jìn)程成為新的進(jìn)程組長(zhǎng)和會(huì)話(huà)組長(zhǎng),這樣就能夠同從父進(jìn)程那邊繼承下來(lái)的登錄會(huì)話(huà)和進(jìn)程組真正脫離。

        進(jìn)程組也被稱(chēng)為作業(yè),這個(gè)作業(yè)本質(zhì)上是由一個(gè)或多個(gè)進(jìn)程組合而成,這是進(jìn)程組的一個(gè)重要特征。進(jìn)程組中有多個(gè)進(jìn)程,每一個(gè)進(jìn)程不是孤立存在的,一定是屬于某一個(gè)確定的進(jìn)程組。在waitpid函數(shù)和kill函數(shù)的參數(shù)中都曾使用進(jìn)程組的概念,目的是簡(jiǎn)化對(duì)多個(gè)進(jìn)程的管理。當(dāng)父進(jìn)程創(chuàng)建子進(jìn)程時(shí)默認(rèn)子進(jìn)程與父進(jìn)程屬于同一個(gè)進(jìn)程組,進(jìn)程組ID等于進(jìn)程組第一個(gè)進(jìn)程ID(組長(zhǎng)進(jìn)程)。所以,組長(zhǎng)進(jìn)程標(biāo)識(shí)其進(jìn)程組ID。組長(zhǎng)進(jìn)程可以創(chuàng)建一個(gè)進(jìn)程組及進(jìn)程組中的進(jìn)程,也可以隨時(shí)被終止。只要進(jìn)程組中有一個(gè)進(jìn)程存在,進(jìn)程組就存在,與組長(zhǎng)進(jìn)程是否終止無(wú)關(guān)。

        會(huì)話(huà)期間通常包含了至少一個(gè)進(jìn)程的集合。既然是會(huì)話(huà),前提是用戶(hù)一開(kāi)始就進(jìn)行了登錄操作,而且一定要成功登錄,當(dāng)用戶(hù)退出登錄以后回話(huà)結(jié)束。在整個(gè)過(guò)程中,出現(xiàn)的所有進(jìn)程都是在當(dāng)前的會(huì)話(huà)中,也隸屬于當(dāng)前的會(huì)話(huà)。

        4.2.3 禁止程序重新開(kāi)啟控制終端

        禁止程序重新開(kāi)啟控制終端,是服務(wù)器端需要嚴(yán)格考慮的問(wèn)題,以保證整個(gè)服務(wù)器的運(yùn)行正?!,F(xiàn)在,進(jìn)程已經(jīng)成為無(wú)終端的會(huì)話(huà)組長(zhǎng),但它可以重新申請(qǐng)打開(kāi)一個(gè)控制終端。要禁止進(jìn)程重新打開(kāi)控制終端,采用的方法是再次創(chuàng)建一個(gè)子進(jìn)程,使進(jìn)程不再成為會(huì)話(huà)組長(zhǎng)。

        4.3 關(guān)閉打開(kāi)的文件描述符

        守護(hù)進(jìn)程的實(shí)現(xiàn)過(guò)程中,有一個(gè)標(biāo)準(zhǔn)步驟是關(guān)閉當(dāng)前打開(kāi)的所有文件描述符。當(dāng)lim.rlim_curr為RLIM_INFINITY時(shí),只需要關(guān)閉前1 024個(gè)文件描述符。遍歷所有可能打開(kāi)的文件描述符是比較復(fù)雜的。但現(xiàn)在的系統(tǒng)調(diào)用很快,很多系統(tǒng)調(diào)用不用耗費(fèi)太長(zhǎng)的時(shí)間即可完成。通常情況下,守護(hù)進(jìn)程啟動(dòng)的時(shí)候,打開(kāi)的文件描述符不多。

        5 結(jié)語(yǔ)

        各大高校為師生提供了一些基本的網(wǎng)絡(luò)服務(wù),比如教師和學(xué)生可以通過(guò)教務(wù)系統(tǒng)進(jìn)行成績(jī)、選課和評(píng)教方面的操作,還能夠共享一些軟件安裝文件。教師也建設(shè)了自己的一些課程網(wǎng)站。通過(guò)課程網(wǎng)站,教師可以提供教學(xué)資源供學(xué)生瀏覽和下載,也可以發(fā)布最新的科研成果;學(xué)生能夠通過(guò)這些網(wǎng)站滿(mǎn)足一定的文件下載和共享需求。隨著雙一流精品課程的建設(shè),師生在使用過(guò)程中可能受到網(wǎng)速的限制,不能及時(shí)下載和上傳。為了讓這些網(wǎng)站真正發(fā)揮作用,本文設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)基于Linux的FTP服務(wù)器,供教師和學(xué)生訪(fǎng)問(wèn)。

        猜你喜歡
        進(jìn)程用戶(hù)
        債券市場(chǎng)對(duì)外開(kāi)放的進(jìn)程與展望
        關(guān)注用戶(hù)
        關(guān)注用戶(hù)
        關(guān)注用戶(hù)
        Camera360:拍出5億用戶(hù)
        100萬(wàn)用戶(hù)
        如何獲取一億海外用戶(hù)
        我國(guó)高等教育改革進(jìn)程與反思
        Linux僵死進(jìn)程的產(chǎn)生與避免
        男女平等進(jìn)程中出現(xiàn)的新矛盾和新問(wèn)題
        国产精品乱码一区二区三区| 久久av少妇亚洲精品| 被灌醉的日本人妻中文字幕| 国产成人无码综合亚洲日韩| 国产成a人亚洲精v品无码性色| 久久频这里精品99香蕉| 美国又粗又长久久性黄大片| 伊人久久这里只有精品| 国内露脸少妇精品视频| 久久这里只精品国产99热| 最新国产精品精品视频| 99精品国产综合久久麻豆| 摸进她的内裤里疯狂揉她动图视频| 狠狠躁夜夜躁无码中文字幕| 成激情人妻视频| 免费看黄视频亚洲网站| 337p人体粉嫩胞高清视频| 国产精品一区二区 尿失禁| 久久久国产精品粉嫩av| 人妻少妇精品视频一区二区三| 精品国产一区二区av麻豆不卡| 久久午夜av一区二区三区| 亚洲精品无码久久久久秋霞| 岛国大片在线免费观看| 国产三级黄色片子看曰逼大片| 国语对白精品在线观看| 亚洲加勒比久久88色综合| 二区三区视频| 国产目拍亚洲精品二区| 伊人中文字幕亚洲精品乱码 | 亚洲精品无码专区在线| 三级国产女主播在线观看| 永久免费看黄网站性色| 女人18毛片a级毛片| 国产 国语对白 露脸| 特黄三级一区二区三区| 精品粉嫩av一区二区三区| 国产av丝袜旗袍无码网站| 人妻无码AⅤ不卡中文字幕| 日本二区三区在线免费| 大地资源网高清在线播放|