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

正文內(nèi)容

操作系統(tǒng)課設(shè)(編輯修改稿)

2024-11-16 22:27 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 ne BUFFER_SIZE 102400 int main(void){ int dev,i=0。char c。char source[BUFFER_SIZE]。//寫(xiě)入MyDeviceDriver設(shè)備的內(nèi)容char goal[BUFFER_SIZE]。//MyDeviceDriver設(shè)備的內(nèi)容讀入到該goal中printf(“input the string you want to write in your device:n”)。while((c=getchar())!=39。n39。)華 中 科 技 大 學(xué) 課 程 設(shè) 計(jì) 報(bào) 告{source[i++]=c。} printf(“n”)。if((dev=open(“/dev/MyDeviceDriver”,O_RDWR))==1)//打開(kāi)MyDeviceDriver設(shè)備失敗printf(“FAIL to open MyDeviceDriver!n”)。else//成功printf(“SUCCESS to open MyDeviceDriver!n”)。printf(“source:n%snn”,source)。write(dev,source,sizeof(source))。//把source中的內(nèi)容寫(xiě)入MyDeviceDriver設(shè)備lseek(dev,0,SEEK_SET)。//把文件指針定位到文件開(kāi)始的位置read(dev,goal,sizeof(source))。//把MyDeviceDriver設(shè)備中的內(nèi)容讀入到goal中printf(“goal:n%snn”,goal)。return 0。} 實(shí)驗(yàn)四實(shí)驗(yàn)四有兩個(gè)選做題目,分別是proc文件監(jiān)控系統(tǒng)和小型文件系統(tǒng),本次實(shí)驗(yàn)我選擇的題目是proc文件監(jiān)控系統(tǒng)。 實(shí)驗(yàn)要求了解/proc文件的特點(diǎn)和使用方法;監(jiān)控系統(tǒng)狀態(tài),顯示系統(tǒng)中若干部件使用狀態(tài);用圖形界面實(shí)現(xiàn)系統(tǒng)監(jiān)控狀態(tài)。 具體實(shí)現(xiàn)(1)/proc文件系統(tǒng)的特點(diǎn)Linux的PROC文件系統(tǒng)是進(jìn)程文件系統(tǒng)和內(nèi)核文件系統(tǒng)的組成的復(fù)合體,是將內(nèi)核數(shù)據(jù)對(duì)象化為文件形式進(jìn)行存取的一種內(nèi)存文件系統(tǒng),是監(jiān)控內(nèi)核的一種用戶接口。它擁有一些特殊的文件(純文本),從中可以獲取系統(tǒng)狀態(tài)信息。(2)功能清單①獲取并顯示主機(jī)名,與之相關(guān)的proc文件為/proc/sys/kernel/hostname; ②獲取并顯示系統(tǒng)啟動(dòng)的時(shí)間,與之相關(guān)的proc文件為/proc/uptime; ③顯示系統(tǒng)到目前為止持續(xù)運(yùn)行的時(shí)間,與之相關(guān)的proc文件為/proc/uptime; ④顯示系統(tǒng)的版本號(hào),與之相關(guān)的proc文件為/proc/sys/kernel/ostype和/proc/sys/kernel/osrelease;⑤ 顯示CPU的型號(hào)和主頻大小,與之相關(guān)的proc文件為/proc/cpuinfo;華 中 科 技 大 學(xué) 課 程 設(shè) 計(jì) 報(bào) 告⑥通過(guò)pid或者進(jìn)程名查詢一個(gè)進(jìn)程,并顯示該進(jìn)程的詳細(xì)信息,提供殺掉該進(jìn)程的功能,與之相關(guān)的proc文件為/proc/(pid)/stat;⑦顯示系統(tǒng)所有進(jìn)程的一些信息,包括pid、ppid、占用內(nèi)存大小、優(yōu)先級(jí)等,與之相關(guān)的proc文件為/proc/(pid)/stat,/proc/(pid)/statm;⑧CPU使用率的圖形化顯示(2分鐘內(nèi)的歷史記錄曲線),與之相關(guān)的proc文件為/proc/stat;⑨內(nèi)存和交換分區(qū)的使用率的圖形化顯示(2分鐘內(nèi)的歷史曲線),與之有關(guān)的proc文件為/proc/meminfo;⑩在狀態(tài)欄顯示當(dāng)前時(shí)間,未使用到/proc中的文件;?在狀態(tài)欄顯示當(dāng)前CPU使用率,與之相關(guān)的proc文件為/proc/stat; ?在狀態(tài)欄顯示當(dāng)前內(nèi)存使用情況,與之相關(guān)的proc文件為/proc/meminfo; ?用新線程運(yùn)行一個(gè)其他程序,未使用到/proc中的文件; ?關(guān)機(jī)功能,未使用到/proc中的文件;(3)功能實(shí)現(xiàn)①獲取并顯示主機(jī)名用fopen函數(shù)打開(kāi)/proc/sys/kernel/hostname文件,然后以文件指針為輸入流,用fgets從其中讀出一行字符包含主機(jī)名,然后用格式化輸出函數(shù)sscanf函數(shù)輸出一個(gè)字符串,即主機(jī)名。②獲取并顯示系統(tǒng)啟動(dòng)的時(shí)間從文件/proc/uptime中獲取系統(tǒng)啟動(dòng)到現(xiàn)在的運(yùn)行時(shí)間(單位是s),然后調(diào)用time函數(shù)獲取系統(tǒng)當(dāng)前時(shí)間(單位是s),用當(dāng)前時(shí)間秒數(shù)減去運(yùn)行時(shí)間秒數(shù)即為系統(tǒng)啟動(dòng)的時(shí)間秒數(shù),然后調(diào)用localtime函數(shù)將系統(tǒng)啟動(dòng)時(shí)間秒數(shù)轉(zhuǎn)換成tm結(jié)構(gòu)體類型的變量,該變量中的成員包括年份、月份、日期、星期幾、時(shí)、分、秒等,再調(diào)用輸出函數(shù)輸出即可。③顯示系統(tǒng)到目前為止持續(xù)運(yùn)行的時(shí)間用fopen函數(shù)打開(kāi)/proc/uptime文件,然后以文件指針為輸入流,用fgets從其中讀出一行字符包含系統(tǒng)運(yùn)行時(shí)間,然后用格式化輸入函數(shù)sscanf從讀取出的字符流中輸入一個(gè)float類型的數(shù)到runtime,即系統(tǒng)運(yùn)行的時(shí)間。④顯示系統(tǒng)的版本號(hào)華 中 科 技 大 學(xué) 課 程 設(shè) 計(jì) 報(bào) 告從/proc/sys/kernel/ostype和/proc/sys/kernel/osrelease中讀取系統(tǒng)類型(比如linux)和系統(tǒng)內(nèi)核版本號(hào),處理方法和獲取系統(tǒng)運(yùn)行時(shí)間的方法一樣。得到系統(tǒng)類型和系統(tǒng)內(nèi)核版本號(hào)之后,調(diào)用QString類的方法arg將兩個(gè)字符串連接起來(lái),再輸出顯示即可。⑤顯示CPU的型號(hào)和主頻大小打開(kāi)/proc/cpuinfo文件后發(fā)現(xiàn)CPU有四個(gè),相同的型號(hào),不同的主頻,后來(lái)才弄清楚所謂的四個(gè)CPU是CPU的四個(gè)核心,而“主頻”并不是主頻,而是當(dāng)前時(shí)刻該核心所使用的CPU核心頻率,隨時(shí)間而變化的。弄清楚文件中的內(nèi)容的含義之后,開(kāi)始處理/proc/cpuinfo,從中讀取CPU的型號(hào)和頻率。處理這個(gè)文件沒(méi)有用到fopen等函數(shù),而是使用了Qt自帶的兩個(gè)類QFile和QTextStream,定義一個(gè)QFile類型的變量file,并用路徑名“/proc/cpuinfo”初始化該變量,其作用是以只讀方式打開(kāi)文件/proc/cpuinfo,然后以file的地址作為參數(shù)初始化QTextStream類型的變量stream,其作用是將/proc/cpuinfo文件中的內(nèi)容以字符流的形式存入變量stream中,相當(dāng)于一個(gè)文本流。由于CPU的型號(hào)是一樣的,所以只讀取第一個(gè)型號(hào)名稱即可,根據(jù)CPU型號(hào)名稱所在的行,采用while循環(huán)讀取stream中的內(nèi)容,每次讀取一行,當(dāng)行數(shù)等于CPU型號(hào)所在行時(shí),將讀取出的一行賦值給一個(gè)QString類型的變量,再調(diào)用QString的方法mid截取CPU型號(hào)名稱,()關(guān)閉file。CPU四個(gè)核心的主頻處理方法和CPU型號(hào)的處理方法一致,參照上述步驟即可。⑥通過(guò)pid或者進(jìn)程名查詢一個(gè)進(jìn)程,并顯示該進(jìn)程的詳細(xì)信息,提供殺掉該進(jìn)程的功能在獲取所有進(jìn)程信息的時(shí)候,獲取到的所有信息已經(jīng)被存儲(chǔ)在一個(gè)全局結(jié)構(gòu)體數(shù)組變量中了,所以查詢的時(shí)候,先獲取輸入lineEdit中的文本(QString類型),然后將文本與全局結(jié)構(gòu)體數(shù)組變量的每一個(gè)數(shù)組元素的name成員和pid成員作比較,若相等,說(shuō)明待查詢的進(jìn)程存在,將該進(jìn)程的詳細(xì)信息輸出即可。殺死進(jìn)程前先要獲取將要被殺死進(jìn)程的名稱或者pid,而且該進(jìn)程必須存在于/proc目錄下,即先查詢一次待殺死的進(jìn)程,處理方法如上所述。Linux系統(tǒng)提供了kill、pkill等殺死進(jìn)程的命令,pkill通過(guò)pid殺死進(jìn)程,kill通過(guò)進(jìn)程名稱殺死進(jìn)程。通過(guò)將lineEdit中的內(nèi)容和kill或pkill組成終端命令,然后調(diào)用system函數(shù)執(zhí)行這華 中 科 技 大 學(xué) 課 程 設(shè) 計(jì) 報(bào) 告些命令即可殺死相應(yīng)的進(jìn)程。⑦顯示系統(tǒng)所有進(jìn)程的一些信息,包括pid、ppid、占用內(nèi)存大小、優(yōu)先級(jí)等 系統(tǒng)的進(jìn)程眾多,且進(jìn)程號(hào)從1到幾萬(wàn)的都有,如果從1開(kāi)始遍歷訪問(wèn),效率就會(huì)很低。所以本次實(shí)驗(yàn)我采用的是Linux中對(duì)目錄進(jìn)行操作的函數(shù)opendir(),readdir()。這兩個(gè)目錄操作函數(shù)在上學(xué)期的操作系統(tǒng)第三次課程實(shí)驗(yàn)中已經(jīng)學(xué)習(xí)使用過(guò),所以再次使用沒(méi)遇到多大的障礙。實(shí)現(xiàn)思路為:聲明一個(gè)DIR類型的指針dir,用opendir函數(shù)打開(kāi)/proc目錄,返回值賦值給dir,然后將dir作為函數(shù)readdir的參數(shù),readdir函數(shù)返回值復(fù)制給dirent結(jié)構(gòu)體指針ptr。ptr指向的結(jié)構(gòu)體包含d_name char數(shù)組成員,即文件或者目錄名,將d_name數(shù)組的0號(hào)元素分別和字符?1?、?9?比較,若處于這兩者之間,則表明該文件或者目錄是進(jìn)程目錄,以該目錄名為參數(shù)調(diào)用獲取進(jìn)程詳細(xì)信息的函數(shù)read_proc。在read_proc函數(shù)中,使用格式化輸出函數(shù)sprintf將參數(shù)目錄名c_pid對(duì)應(yīng)目錄下的文件stat的路徑輸出到char數(shù)組filename中,再調(diào)用C++的類ifstream,聲明一個(gè)ifstream類性的變量meminfo,用filename初始化meminfo,然后用析取器()從meminfo中輸入數(shù)據(jù)到結(jié)構(gòu)體數(shù)組procInfo的每個(gè)元素的成員變量中,析取器()會(huì)自動(dòng)忽略空字符。所需要的進(jìn)程信息并不是連續(xù)存放在stat文件中的,中間包含有其他不需要顯示的進(jìn)程信息,解決方法是定義一個(gè)string類型的變量temp,根據(jù)stat文件中的信息存放順序,將所有不需要的進(jìn)程信息全部輸入到temp中。此外還要注意一個(gè)問(wèn)題,進(jìn)程名稱帶有括號(hào)“()”,所以需要將括號(hào)去掉,解決方法是使用string類的方法substr,該函數(shù)的參數(shù)有兩個(gè),一個(gè)是想截取的字符串首字符在原字符串中的位置,第二個(gè)參數(shù)是想截取的字符串末尾字符后面一個(gè)字符,在這里就是“)”。處理完畢之后,所需要的關(guān)于進(jìn)程c_pid的詳細(xì)信息都存儲(chǔ)在全局結(jié)構(gòu)體數(shù)組procInfo的元素中了。循環(huán)采用上述思路,直到所有進(jìn)程目錄都被處理完畢,所有的進(jìn)程信息就都存儲(chǔ)在了全局結(jié)構(gòu)體數(shù)組procInfo中,然后用定時(shí)器觸發(fā)定時(shí)更新全局結(jié)構(gòu)體數(shù)組procInfo中的內(nèi)容。⑧CPU使用率的圖形化顯示由于需要畫(huà)出CPU使用率兩分鐘內(nèi)的歷史記錄曲線,所以需要計(jì)算并存儲(chǔ)120個(gè)連續(xù)時(shí)刻的CPU利用率。定義一個(gè)全局QList變量yList,用于存放CPU使用率。華 中 科 技 大 學(xué) 課 程 設(shè) 計(jì) 報(bào) 告在CPURate函數(shù)中調(diào)用add_point函數(shù),add_point的參數(shù)是cpuRate。在函數(shù)add_point中,首先判斷yList的大小,若大于120,則把yList的隊(duì)首元素刪除,保證yList的元素個(gè)數(shù)恒等于120;若等于0,則將yList前119個(gè)元素初始化為0,這樣的話,CPU歷史記錄曲線就會(huì)從右邊向左邊逐漸顯示出來(lái);若大于等于1,則在yList末尾插入新的cpuRate,然后調(diào)用UpdateCPULine函數(shù)畫(huà)出記錄曲線。得到CPU使用率之后,在函數(shù)UpdateCPULine中畫(huà)圖。先在QPixmap類型的變量pix上畫(huà)曲線,pix相當(dāng)于一塊畫(huà)布,然后再把pix添加到label標(biāo)簽上。pix的背景色設(shè)置為藍(lán)色,然后定義一個(gè)QPainter類painter,painter的畫(huà)圖設(shè)備就是pix,定義QPen畫(huà)筆pen,畫(huà)筆顏色設(shè)置為紅色,畫(huà)筆寬度為2個(gè)像素,設(shè)置完成后,以yList中存儲(chǔ)的cpuRate為縱坐標(biāo),以yList的元素下標(biāo)為橫坐標(biāo),并根據(jù)坐標(biāo)軸單位長(zhǎng)度所占實(shí)際像素個(gè)數(shù)稍微調(diào)整一下每個(gè)點(diǎn)的橫縱坐標(biāo),然后調(diào)用painter的drawLine方法畫(huà)出這些點(diǎn)并依次連接起來(lái),就得到了2分鐘內(nèi)的CPU使用率歷史記錄曲線,而且歷史記錄曲線可以隨著時(shí)間從右向左更新。⑨內(nèi)存和交換分區(qū)的使用率的圖形化顯示由于需要畫(huà)出內(nèi)存使用率兩分鐘內(nèi)的歷史記錄曲線,所以需要計(jì)算并存儲(chǔ)120個(gè)連續(xù)時(shí)刻的內(nèi)存利用率。定義一個(gè)全局QList變量yList1,用于存放內(nèi)存使用率。在MemRate函數(shù)中調(diào)用add_point函數(shù),add_point的參數(shù)是memRate。在函數(shù)add_point中,首先判斷yList1的大小,若大于120,則把yList1的隊(duì)首元素刪除,保證yList1的元素個(gè)數(shù)恒等于120;若等于0,則將yList1前119個(gè)元素初始化為0,這樣的話,內(nèi)存使用率歷史記錄曲線就會(huì)從右邊向左邊逐漸顯示出來(lái);若大于等于1,則在yList1末尾插入新的memRate,然后調(diào)用UpdateMemLine函數(shù)畫(huà)出記錄曲線。得到內(nèi)存使用率之后,在函數(shù)UpdateMemLine中畫(huà)圖。先在QPixmap類型的變量pix上畫(huà)曲線,pix相當(dāng)于一塊畫(huà)布,然后再把pix添加到label標(biāo)簽上。pix的背景色設(shè)置為藍(lán)色,然后定義一個(gè)QPainter類painter,painter的畫(huà)圖設(shè)備就是pix,定義QPen畫(huà)筆pen,畫(huà)筆顏色設(shè)置為紅色,畫(huà)筆寬度為2個(gè)像素,設(shè)置完成后,以yList1中存儲(chǔ)的memRate為縱坐標(biāo),以yList1的元素下標(biāo)為橫坐標(biāo),并根據(jù)坐標(biāo)軸單位長(zhǎng)度所占實(shí)際像素個(gè)數(shù)稍微調(diào)整一下每個(gè)點(diǎn)的橫縱坐標(biāo),然后調(diào)用painter的drawLine方法畫(huà)出這些點(diǎn)并依次連接起來(lái),就得到了2分鐘內(nèi)的內(nèi)存使用率歷史記華 中 科 技 大 學(xué) 課 程 設(shè) 計(jì) 報(bào) 告錄曲線,而且歷史記錄曲線可以隨著時(shí)間從右向左更新。⑩在狀態(tài)欄顯示當(dāng)前時(shí)間調(diào)用QDateTime的方法currentDateTime獲取當(dāng)前時(shí)間time,time是一個(gè)QDateTime類型的變量,然后調(diào)用QDateTime的方法toString把time轉(zhuǎn)化成格式為yyyyMMdd hh:mm:ss dddd的QString字符串,再在主窗口的狀態(tài)欄顯示輸出即可。?在狀態(tài)欄顯示當(dāng)前CPU使用率CPU的使用率是指CPU的使用時(shí)間和CPU總時(shí)間的比值。因?yàn)?proc/stat文件中的所有值都是從系統(tǒng)啟動(dòng)開(kāi)始累計(jì)到當(dāng)前時(shí)刻,所以計(jì)算CPU使用率時(shí)需要取兩個(gè)采樣點(diǎn),利用兩個(gè)點(diǎn)的差值計(jì)算CPU使用率,此次實(shí)驗(yàn)采樣方法是每隔1秒采樣一次。CPU使用率的計(jì)算公式為cpuRate=(idle2idle1)*(to
點(diǎn)擊復(fù)制文檔內(nèi)容
合同協(xié)議相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1