第3章 操作系統(tǒng)及相關(guān)程序設(shè)計(jì)3-設(shè)備文件接口_第1頁(yè)
第3章 操作系統(tǒng)及相關(guān)程序設(shè)計(jì)3-設(shè)備文件接口_第2頁(yè)
第3章 操作系統(tǒng)及相關(guān)程序設(shè)計(jì)3-設(shè)備文件接口_第3頁(yè)
第3章 操作系統(tǒng)及相關(guān)程序設(shè)計(jì)3-設(shè)備文件接口_第4頁(yè)
第3章 操作系統(tǒng)及相關(guān)程序設(shè)計(jì)3-設(shè)備文件接口_第5頁(yè)
已閱讀5頁(yè),還剩50頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第3章 操作系統(tǒng)及程序設(shè)計(jì) 設(shè)備管理文件管理用戶接口西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心http:/軟件開發(fā)技術(shù)基礎(chǔ)2本節(jié)內(nèi)容設(shè)備管理程序設(shè)計(jì)文件管理程序設(shè)計(jì)人機(jī)接口管理程序設(shè)計(jì) 3什么是外部設(shè)備作為計(jì)算機(jī)系統(tǒng)與外界交互的工具,負(fù)責(zé)計(jì)算機(jī)與外部的輸入輸出工作,稱這類設(shè)備為外部設(shè)備簡(jiǎn)稱為外設(shè)3.4 設(shè)備管理設(shè)備管理的功能是根據(jù)設(shè)備分配原則對(duì)設(shè)備進(jìn)行分配控制輸入輸出設(shè)備和CPU之間進(jìn)行數(shù)據(jù)交換使設(shè)備與主機(jī)能夠并行工作為用戶提供良好的設(shè)備使用界面提高設(shè)備之間、設(shè)備與CPU之間、進(jìn)程之間的并行性,從而提高整個(gè)操作系統(tǒng)的效率緩沖區(qū)管理、釋放設(shè)備 43.4.1 設(shè)備管理1. 設(shè)備的分類按使用方式可分為獨(dú)占設(shè)備和

2、共享設(shè)備;按處理速度可分為慢速設(shè)備和快速設(shè)備;按數(shù)據(jù)組織和存取方式可分為字符設(shè)備和塊設(shè)備;按通信方式可分為串行設(shè)備和并行設(shè)備;按應(yīng)用范圍可分為通用設(shè)備和專用設(shè)備;按隸屬關(guān)系可分為系統(tǒng)設(shè)備和用戶設(shè)備;按實(shí)體程序可分為真實(shí)設(shè)備和虛擬設(shè)備等等562.設(shè)備的I/O控制方式(1)程序直接控制方式(2)中斷控制方式(3)DMA方式(4)通道方式7緩沖技術(shù)緩沖區(qū)是一種交換數(shù)據(jù)的區(qū)域。 緩沖技術(shù)的分類單緩沖技術(shù)雙緩沖多緩沖緩沖池3. 設(shè)備管理的方式進(jìn)程首先要向設(shè)備管理程序提出申請(qǐng),然后由設(shè)備管理程序按照一定的分配算法給進(jìn)程分配必要的資源。如果進(jìn)程的申請(qǐng)沒有成功,就要在資源的等待隊(duì)列中排隊(duì)等待,直到獲得所需的資

3、源。89設(shè)備分配的原則設(shè)備的固有屬性設(shè)備分配算法設(shè)備分配中的安全性與設(shè)備無(wú)關(guān)性:10Windows操作系統(tǒng)通過(guò)設(shè)備驅(qū)動(dòng)程序來(lái)完成設(shè)備的啟動(dòng)、操作、數(shù)據(jù)流向控制和設(shè)備的關(guān)閉工作的4. 設(shè)備分配的步驟分配設(shè)備分配控制器分配通道115.設(shè)備驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序的作用下實(shí)現(xiàn)真正的I/O操作126. DOS的設(shè)備管理MS-DOS中的設(shè)備分為塊設(shè)備和字符塊設(shè)備。其中,塊設(shè)備是以“塊”為單位進(jìn)行數(shù)據(jù)傳輸,磁盤是典型的塊設(shè)備;字符設(shè)備是以“字符”為單位進(jìn)行數(shù)據(jù)傳輸,典型的字符設(shè)備有鍵盤、針式打印機(jī)和顯示器等137. Windows的設(shè)備管理Windows操作系統(tǒng)是通過(guò)設(shè)備驅(qū)動(dòng)程序來(lái)完成設(shè)備的啟動(dòng)、操作、數(shù)據(jù)流

4、向控制和設(shè)備的關(guān)閉工作。Windows設(shè)備驅(qū)動(dòng)程序由一組處理I/O請(qǐng)求的不同階段的例程組成,包括:初始化例程、調(diào)度例程集、啟動(dòng)I/O例程、中斷服務(wù)例程和中斷服務(wù)延遲過(guò)程調(diào)用例程等。143.4.2 設(shè)備管理程序設(shè)計(jì)Windows MCIMCI(Media Control Interface,媒體控制接口)向Windows程序提供了在高層次上控制媒體設(shè)備接口的能力。程序員不必關(guān)心具體設(shè)備,就可以對(duì)激光唱機(jī)(CD)、視盤機(jī)、波形音頻設(shè)備、視頻播放設(shè)備和MIDI設(shè)備等媒體設(shè)備進(jìn)行控制。MCI提供兩種編程接口:命令字符串命令消息1516命令字符串命令字符串接口MCI可以通過(guò)mciSendString函數(shù)

5、向設(shè)備發(fā)送MCIERROR mciSendString(LPCTSTR lpszCommand, / 命令字符串指針LPTSTR lpszReturnString, / 返回值指針UINT cchReturn, /返回值所占字節(jié)數(shù)HANDLE hWndCallback /回調(diào)窗口句柄,一般為NULL) /若成功則返回017使用MCI頭文件windows.hmmsystem.h在連接程序時(shí)要用到winmm.lib引入庫(kù)或者在源程序中加入下面一行: #pragma comment(lib, winmm.lib)18mciSendString使用#include#include#include#pr

6、agma comment(lib, winmm.lib)/主程序void main(void) int a; DWORD dwErrorCode; char buf100; dwErrorCode=mciSendString(open d:rose2.wav type waveaudio alias dillo, buf, strlen(buf), NULL);dwErrorCode=mciSendString(play dillo wait ,NULL,0,0); /from 0 to 100毫秒cina;19mciSendString使用2#include#include#include#

7、pragma comment(lib, winmm.lib)/主程序void main(void) int a; DWORD dwErrorCode; char buf50;mciSendString(open d:dillo.avi type avivideo alias dillo, buf, strlen(buf), NULL);mciSendString(play dillo repeat, buf, strlen(buf), NULL); /重復(fù)播放cina;20Open命令的格式open device_name type device_type alias device_alias

8、 device_name 要使用的設(shè)備名,通常是文件名。 type device_type設(shè)備類型,例如waveaudio或sequencer,可省略。 alias device_alias設(shè)備別名,指定后可在其他命令中代替設(shè)備名。21Play命令的格式play device_alias from pos1 to pos2 wait repeat 若省略from則從當(dāng)前磁道開始播放,若省略to則播放到結(jié)束。 若指明wait則等到播放完畢命令才返回。 若指明repeat則會(huì)不停的重復(fù)播放。 若同時(shí)指明wait和repeat則命令不會(huì)返回,本線程產(chǎn)生堵塞,通常會(huì)引起程序失去響應(yīng)。22Open設(shè)備類

9、型open是MCI打開設(shè)備的命令,MCI的設(shè)備類型如下: animation動(dòng)畫設(shè)備 cdaudioCD播放器 dat數(shù)字音頻磁帶機(jī) digitalvideo 某一窗口中的數(shù)字視頻(不基于GDI) other未定義的MCI設(shè)備 overlay重疊設(shè)備(窗口中的模擬視頻) scanner圖象掃描儀 sequencerMIDI序列器 videodisc視盤機(jī) waveaudio播放數(shù)字波形文件的音頻設(shè)備23命令消息接口命令消息接口應(yīng)用消息傳遞方式與MCI設(shè)備通信。使用的函數(shù)為mciSendCommand24mciSendCommand/在打開設(shè)備時(shí)不用該參數(shù)25MCI_PLAY_PARMS參數(shù)結(jié)構(gòu)

10、26CI消息一般包括四部分設(shè)備標(biāo)示符,打開設(shè)備時(shí)不用消息值標(biāo)明命令選擇項(xiàng)的一組標(biāo)志命令附加參數(shù)的結(jié)構(gòu)體27MCI的命令消息128MCI的命令消息229【例3-8】光驅(qū)管理程序。 使用“mmsystem.h”文件中描述的媒體控制接口(MCI) API函數(shù)mciSendCommand,MCI_OPEN_PARMS 為光驅(qū)打開參數(shù)結(jié)構(gòu)體,MCI_STATUS_PARMS為光驅(qū)狀態(tài)參數(shù)結(jié)構(gòu)體,ZeroMemory函數(shù)給光驅(qū)打開參數(shù)變量op賦零值光驅(qū)類型參數(shù)設(shè)為CD_AUDIO,使用mciSendCommand函數(shù)首先發(fā)送設(shè)備打開命令,根據(jù)用戶選擇分別打開光驅(qū)和關(guān)閉光驅(qū),最后釋放設(shè)備存取 USE MFC

11、30#include #include #include /MCI API函數(shù)頭文件#pragma comment(lib,winmm)31int main()MCI_OPEN_PARMS op;/光驅(qū)打開參數(shù)結(jié)構(gòu)DWORD flags;ZeroMemory(&op, sizeof(MCI_OPEN_PARMS);/光驅(qū)參數(shù)賦值為0op.lpstrDeviceType = (LPCSTR) MCI_DEVTYPE_CD_AUDIO;/光驅(qū)類型參數(shù)為CD_AUDIOop.lpstrElementName =F:;flags= MCI_OPEN_TYPE| MCI_OPEN_TYPE_ID | M

12、CI_OPEN_ELEMENT |MCI_OPEN_SHAREABLE; mciSendCommand(0,MCI_OPEN,flags,(unsigned long)&op); /發(fā)送設(shè)備打開命令mciSendCommand(op.wDeviceID,MCI_SET,MCI_SET_DOOR_OPEN,0);/打開光驅(qū)return 0;32MCI_OPEN的消息標(biāo)志 MCI_OPEN_TYPE 對(duì)應(yīng) MCI_OPEN_PARMS結(jié)構(gòu)中的 LPCSTR lpstrDeviceType 成員變量,設(shè)備類型的名字或常量標(biāo)識(shí)。 MCI_OPEN_TYPE_ID 和 MCI_OPEN_TYPE fla

13、g 一起使用,可以在 MCI_OPEN_PARMS結(jié)構(gòu)中的 lpstrDeviceType 成員變量的低字中得到標(biāo)準(zhǔn)的MCI 設(shè)備的類型ID,同時(shí)在高字中指出該設(shè)備ID 此時(shí)在系統(tǒng)里的順序索引號(hào)。MCI_OPEN_ELEMENT 對(duì)應(yīng) MCI_OPEN_PARMS結(jié)構(gòu)中的 LPCSTR lpstrElementName 成員變量,設(shè)備元素 (通常是打開的文件全路徑). MCI_OPEN_SHAREABLE 將設(shè)備或文件以共享的方式打開。333.4.2 文件管理與程序設(shè)計(jì)計(jì)算機(jī)中的文件是指一組相關(guān)信息的集合。文件具有一定的數(shù)據(jù)結(jié)構(gòu)、分類屬性和訪問(wèn)權(quán)限。文件從物理上由位(bit)、字節(jié)(byte)

14、、塊(block)、頁(yè)(page)和盤(disk)等組成;從邏輯上由字(word)、字段(segment)、記錄(record)、虛擬塊(virtual block)、文件(file)、文件目錄(file directory)、文件夾(folder)和文件卷(volume)等組成。【例3-9】雙緩沖顯示圖形程序文檔/視圖框架程序 OnDraw 函數(shù)CDC CBitmap3435 3.5 文件管理應(yīng)用程序設(shè)計(jì)文件具有符號(hào)名的一組相關(guān)信息項(xiàng)的集合36文件類型常用文件類型.exe 可執(zhí)行文件,.lib靜態(tài)庫(kù)文件,.dll動(dòng)態(tài)庫(kù)文件,.ocx 組件文件,.cpp C+源程序文件,.java Java源

15、程序文件,.html 網(wǎng)頁(yè)文件,.wav聲音文件,.jpg 圖片文件,.doc Word文件,.mdb Access數(shù)據(jù)庫(kù)文件,.ini初始化文件,.log日志文件,.chk磁盤整理文件 3.5.1文件管理操作系統(tǒng)中與文件管理有關(guān)的程序和所管理的文件稱為文件系統(tǒng)371.功能(1) 分配文件的存儲(chǔ)空間。(2) 實(shí)現(xiàn)從邏輯文件到物理文件間的轉(zhuǎn)換,即“按名存取”外存上的文件。(3) 建立文件目錄。提供按名存取的有效手段和保證文件安全的機(jī)構(gòu)。(4) 提供合理的存取方法以適應(yīng)各種不同應(yīng)用。(5) 實(shí)現(xiàn)文件的共享、保護(hù)和保密。不同用戶能在系統(tǒng)的控制下共享其它用戶的文件。(6) 提供一組文件操作,完成對(duì)文件

16、的建立、刪除、更名、復(fù)制、移動(dòng)、打開、讀、寫和關(guān)閉等操作。382.文件結(jié)構(gòu)文件的結(jié)構(gòu)可分為邏輯結(jié)構(gòu)和物理結(jié)構(gòu)兩種邏輯結(jié)構(gòu)是指文件的外部組織形式,即從用戶角度看到的文件組織形式,用戶以這種形式存取、檢索和加工有關(guān)信息。它還可分為流式文件和記錄式文件物理結(jié)構(gòu)又稱存儲(chǔ)結(jié)構(gòu),它是指文件在外存上的存儲(chǔ)組織形式,與存儲(chǔ)介質(zhì)的存儲(chǔ)特性有關(guān)393.文件目錄文件存入文件存儲(chǔ)空間后,用戶要實(shí)現(xiàn)“按名存取”,必須建立文件名與該文件在外存空間中的物理地址之間的對(duì)應(yīng)關(guān)系體現(xiàn)這種對(duì)應(yīng)關(guān)系的數(shù)據(jù)結(jié)構(gòu)稱為文件目錄文件目錄中應(yīng)包括:文件的符號(hào)名、文件的物理地址和文件屬性。40414.Windows的文件系統(tǒng) 普通文件有系統(tǒng)文件

17、和庫(kù)文件等,而文件夾(目錄)和設(shè)備是一種特殊的文件 文件的保護(hù)可以通過(guò)改變文件的屬性為可讀、可寫、可執(zhí)行、隱藏和歸擋來(lái)進(jìn)行。Windows操作系統(tǒng)采用FAT32和NTFS兩種文件系統(tǒng)格式,F(xiàn)AT32采用文件目錄表FDT和文件分配表FAT相結(jié)合的方式來(lái)管理文件。NTFS采用壓縮存儲(chǔ)方式,具有文件權(quán)限的管理功能,能夠更好地管理文件。 3.5.2文件管理程序設(shè)計(jì)使用Windows API和Visual C+的MFC中有關(guān)文件系統(tǒng)的函數(shù)和類,可以管理磁盤上的文件和目錄。用到的主要函數(shù)和類有:GetLogicalDrives函數(shù)取得邏輯盤,GetDriveType函數(shù)判斷盤的類型,CFileFind類對(duì)

18、文件或目錄進(jìn)行查找,CFile類讀寫文件的內(nèi)容。也可以使用標(biāo)準(zhǔn)C語(yǔ)言的fopen、fread、fwrite和fclose等函數(shù)來(lái)進(jìn)行文件的操作。4243 例3-10 編寫程序,瀏覽磁盤驅(qū)動(dòng)器使用MFC和API函數(shù)GetLogicalDrives取得“我的電腦”中的所有盤,并得到一個(gè)DWORD類型的數(shù)。dwDriveList = GetLogicalDrives () 通過(guò)提取和判斷dwDriveList的每一位,得到所有盤符。GetDriveType判別每一盤符的類型。 UINT GetDriveType(int nDrive)。44用到的其他函數(shù)CString代表一個(gè)字符串對(duì)象,SetAt

19、函數(shù)改變字符串某個(gè)位置的字符,GetLength函數(shù)取得字符的長(zhǎng)度,GetBuffer函數(shù)將一個(gè)CString類型的字符串轉(zhuǎn)換為L(zhǎng)PTSTR類型的指定長(zhǎng)度的字符串,后者可以使用cout輸出 45例3-11 編程判別指定文件或文件夾的的屬性從命令行輸入指定文件或目錄名稱,可以包含通配符(*和?);使用MFC的 CFileFind類的FindFile函數(shù)對(duì)指定文件進(jìn)行查找; CFileFind finder; BOOL bWorking = finder.FindFile(argv1); /取得命令行參數(shù)指定的文件名46CFileFind類的FindNextFile函數(shù)對(duì)指定文件繼續(xù)進(jìn)行查找,bW

20、orking = finder.FindNextFile() 通過(guò)函數(shù)GetFileName、GetFilePath、IsDirectory、IsReadOnly 和GetCreationTime得到文件的名稱、路徑、是否目錄、是否只讀和建立時(shí)間等,并顯示相應(yīng)結(jié)果。47另一種查找文件的方法#include#includevoid main()BOOL flag=0;HANDLE hfile=NULL;WIN32_FIND_DATA lpFindFileData;hfile=FindFirstFile (*.cpp,&lpFindFileData);if(hfile)flag=1;while(f

21、lag)coutlpFindFileData.cFileNameendl;flag=FindNextFile (hfile,&lpFindFileData);例3-12編寫讀取MP3文件基本信息的程序MP3文件是由幀(frame)構(gòu)成的,幀是MP3 文件最小的組成單位。整個(gè)MP3 文件結(jié)構(gòu)包括三部分:TAG_V2(ID3V2)、Frame和TAG_V1(ID3V1)。其中,F(xiàn)rame為一系列的幀,個(gè)數(shù)由文件大小和幀長(zhǎng)決定,每個(gè)frame又分為幀頭和數(shù)據(jù)實(shí)體兩部分。幀頭記錄了MP3的位率、采樣率和版本等信息;ID3V2 位于文件頭部,包含了作者、作曲、專輯等信息,長(zhǎng)度不固定,是對(duì)ID3V1的擴(kuò)展48ID3V1位于文件尾部,長(zhǎng)度為128字節(jié),也包含作者、作曲、和專輯等信息。ID3V1的結(jié)構(gòu)如下:typedef struct tagID3V1char Header3; /標(biāo)簽頭必須是TAG否則認(rèn)為沒有標(biāo)簽char Title30; /標(biāo)題char author30; /作者char disc_name30; /專集名稱char Year4; /發(fā)行年份char Remark28; /備注char reserve; /保留char track; /音軌char Genre; /類型ID3V1,*pID3V1;本例

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論