【正文】
或讀寫文件,可以通過時鐘相關的系統(tǒng)調用獲得系統(tǒng)時間或設置定時器等。從邏輯上來說,系統(tǒng)調用可被看成是一個內核與用戶空間程序交互的接口,它好比一個中間人,把用戶進程的請求傳達給內核,待內核把請求處理完畢后再將處理結果送回給用戶空間。 基本原理 本課題的運行結果,首先是在運行開始時給定了 10 個選擇開關,供用戶選擇,每當接收一次用戶的選擇時,系統(tǒng)將進行一次的 IO 中斷,之后執(zhí)行相應的中斷服務程序,在這里是指由 dos,bios 中斷調用編寫好的函數(shù),調用結束時,將臨時結果保存,并退出中斷,繼續(xù)響應用戶的選擇,直到用戶選擇了退出。如下圖所示: 三、總體設計 實現(xiàn)方法程序通過選擇開關 switch...case 將用 dos,bios 調用編寫的函數(shù)組合起來供用戶做出佛山科學技術學院課程設計用紙3選擇。在對應處理用戶的選擇編寫的函數(shù)中,主要的核心是 dos 功能中斷調用函數(shù)的編寫,其中包括中斷類型號,中斷功能調用號等的設置,以及響應用戶選擇后中斷服務程序的編寫。另外,可以通過參看當前工作目錄下的文件信息或者通過 Validate 開頭的相關函數(shù)進行程序運行結果的驗證 技術路線 整個程序的設計流程,圍繞著 bios,dos 功能中斷調用這一主線,編寫好相關文件操作函數(shù),在響應用戶選擇之后,對應執(zhí)行相關的函數(shù)四、詳細設計 主要函數(shù)Int OperOfSel():用于顯示可供用戶選擇的功能,并提示用戶作出相應的功能選擇Void CreateFile(char filename[80]):用于創(chuàng)建一個新的文件:根據用戶輸入的文件名進行文件的創(chuàng)建,如果文件創(chuàng)建失敗:如磁盤空間已滿或者已經存在該文件,即創(chuàng)建失敗Int DeleteFile(char filename[80]):用于刪除一個文件,如果刪除成功,將返回文件代號,否則刪除失敗:可能是不存在該文件Int OpenFile(char filename[80]):用于打開一個文件,如果打開成功,則返回文件代號,否則打開失敗,可能是不存在該文件Void CloseFile(filename[80]): 用于關閉一個文件Void WriteToFile(filename[80]):用于寫順序文件 基本文件內容的輸入 以及文件緩沖區(qū)的管理:首先根據用戶輸入的文件名打開一個文件,如果存在該文件,則打開成功,開始寫入內容,此時繼續(xù)接受用戶輸入的內容,注意,輸入直到用戶鍵入回車鍵即表示輸入完畢,此時將輸入的內容根據文件緩沖區(qū)管理規(guī)則將用戶輸入的內容進行存儲至指定文件名的文件中Void ReadFromFile(filename[80]):用于讀順序文件 基本文件內容的輸出 以及文件緩沖區(qū)的管理:從指定的文件中讀取文件中的內容,并輸出。Void ValidateOpenFile(char filename[80]):用于驗證上述文件訪問函數(shù)編寫的正確性:用于驗證創(chuàng)建文件 打開文件是否成功Void ValidateReadFile(char filename[80]):用于驗證上述文件訪問函數(shù)編寫的正確性:用于驗證上述中 WriteToFile(filename[80])以及 ReadFromFile(filename[80]):函數(shù) 引用函數(shù)Clrscr()用于清空屏幕的作用五、完成情況本程序完成了其中的 9 項,能夠實現(xiàn)文件的創(chuàng)建,打開,關閉,基本文件內容的輸入,輸出,文件緩沖區(qū)的管理,以及文本文件的驗證程序,寫順序文件,讀順序文件。因為對文件句柄以及寫,讀隨機文件的理解不是很清晰,故而沒有動手實踐完成。另外,本程序在 dos 下進行演示,需要根據提示來進行輸入,不允許用戶胡亂的輸入,不然有可能程序處理不了,即本程序在某種程度上還不是很穩(wěn)定,安全。佛山科學技術學院課程設計用紙4但從理論上的角度上講,只要操作合理,那么本程序將可以實現(xiàn)對應的功能。六、使用說明運行成功后進行首頁,開始接受用戶的選擇接著進行相應功能選項前面對應數(shù)字的輸入,在這里以 1,5,6,10 為例,其他為同樣的道理1:為創(chuàng)建一個新的文件表示 文件已經存在,故而創(chuàng)建失敗 查看目錄,果然已經存在了 ,故而提示創(chuàng)建失敗佛山科學技術學院課程設計用紙5再次執(zhí)行 1 號功能選擇: 創(chuàng)建成功查看目錄下,果然創(chuàng)建了 佛山科學技術學院課程設計用紙6進行 10 號功能的選擇結果將出現(xiàn)清空屏幕的效果佛山科學技術學院課程設計用紙7進行 5 號功能的選擇:輸入成功,提示輸入了多少個字符 ,上述統(tǒng)計了一下(包括字符) 為 63 個 在目錄打開此文件,果然是寫入了這些內容下面進行 6 號功能的演示佛山科學技術學院課程設計用紙8上述的演示結果 正好符合了其中的要求其他的功能演示也是同樣的道理七、設計總結 系統(tǒng)特色在本系統(tǒng)中已初步實現(xiàn)一個可訪問的文件接口,能夠正常的解析命令并執(zhí)行,在解析命令方面,采用中斷函數(shù)調用以及功能類型號選擇設置的形式,達到直接與底層“打交道”的作用,效率高 經驗教訓在編程過程中要多使用庫函數(shù)中自帶的內容,不必另外再去編寫已有的功能,這樣不僅能節(jié)省時間,也能提高程序的可靠性。要多了解庫函數(shù),可以閱讀相應的幫助文件來獲得有用的信息。遇到問題多與老師同學討論,可以幫助自己跳出思維定勢。 實踐感受每次的課程設計都是對我們所學知識的一個深化,在實踐過程中能遇到許多的問題,遇到問題?分析問題?解決問題,這樣對知識的理解得到一個升華。實踐過程中學到的都是印象非常深刻的,所以以后要多參加這樣的實踐,認真對待每一次機會。本次的課程設計,其實從某種程度上來說,還是挺有難度的,因為,之前對于 C 語言的了解是通過其高級函數(shù)的,如文件的訪問中,正是通過其高級函數(shù)來訪問的。剛開始還不知所措,網上的介紹也很模糊,根本很難找到有關 dos 中斷進行文件訪問接口的相關設計。后來在于伙伴的討論下,知道了 C 高級實用設計這本書,從次書中受益匪淺,加上 80x86 匯編語言程序設計,更是增長了自己對于匯編的見識,從此更加肯定了匯編在底層操縱的作用!而且通過此次的課程設計,認識了討論的重要性,我個人覺得編碼正是如此,如果遇到了一個人難以解決,那么最好是提出來與伙伴或者同學一同探討,這不但能直到別人的向想法,更能讓自己認識自己的不足,更有甚者,能夠增長自己的見識?。。。?!佛山科學技術學院課程設計用紙9參考資料 《計算機操作系統(tǒng)教程》 (第 2 版)張堯學 史美林 編著 清華大學出版社 《操作系統(tǒng)實驗指導》任愛華 李鵬 劉方毅 清華大學出版社 《操作系統(tǒng)實驗教程——核心技術與編程實例》顧寶根 王立松 顧喜梅 科學出版社 《80x86 匯編語言程序設計》沈美明,溫冬嬋編著,清華大學出版社5,、 《C 高級實用程序設計》王世元 編著 清華大學出版社 《C 語言程序設計》譚浩強 編著 清華大學出版社附錄:源代碼在 環(huán)境includeincludeincludeincludeincludeinclude//The number of type of interruptdefine INTER 0x21//The size of filenamedefine Num 80//the number of charactersdefine CNum 9//Function Of Selectionint OperOfSel(){//clrscr()。printf(\n\n\n\nFunction Of Selection\n)。printf(\n0 Exit \n1 Create a new file \n2 Delete a existing file )。printf(\n3 Open a existing file \n4 Close an existing file )。printf(\n5 Input basic contents to existing file )。佛山科學技術學院課程設計用紙10printf(\n6 Output basic contents from existing file )。printf(\n7 To validate the file is open or not )。printf(\n8 To validate the reading contents from file )。//printf(\n9 To validate the writting contents to file )。printf(\n10 Clean the screen)。printf(\n\nFunction Of Selection\n)。int sel。printf(\nInput Your Selction: )。scanf(%d,amp。sel)。return sel。}//Create a new filevoid CreateFile(char filename[80]){union REGS inregs,outregs。struct SREGS segregs。//The function number of create file is 5B=0x5B。//Set the segment address and effective address=FP_OFF(filename)。=FP_SEG(filename)。//Set the attribute of file=0。int86x(INTER,amp。inregs,amp。outregs,amp。segregs)。if(==2){printf(\nFail To Create New File\n)。return。}if(==80)佛山科學技術學院課程設計用紙11{printf(\nFail to create file: %s The file has benn existed\n,filename)。return。}printf(\nCreate New File:%s Successfully!The File39。s Attribute is:%d\n,filename,)。printf(The FileCode is:%d\n,)。}//Delete a exist fileint DeleteFile(char filename[80]){union REGS inregs,outregs。struct SREGS segregs。//The function number of create file is 41=0x41。=FP_OFF(filename)。=FP_SEG(filename)。intdosx(amp。inregs,amp。outregs,amp。segregs)。int result = 。return result。}//Open an existing fileint OpenFile(char filename[80]){union REGS inregs,outregs。struct SREGS segregs。int result。佛山科學技術學院課程設計用紙12=0x3D。=FP_OFF(filename)。=FP_SEG(filename)。//Set the way to access file=2。int86x(INTER,amp。inregs,amp。outregs,amp。segregs)。//You Can Through CreateFile() To Know The FileCode as test//printf(Successfully open file :%d \n,)。/*if(2==){printf(\nFail To Open The File:%s May not exist\n,filename)。}else{printf(\nSuccessfully Opening The File: %s The FileCode Is:%d\n,filename,)。}*/result = 。return result。}//Close The Existing Filevoid CloseFile(char filename[80]){union REGS inregs,outregs。struct SREGS segregs。佛山科學技術學院課程設計用紙13int result。int FileCode。//To Close The File : We Should Open The File Firstly。The File Should be exist=0x3D。=FP_OFF(filename)。=FP_SEG(filename)。//Set the way to access file=2。int86x(INTER,amp。inregs,amp。outregs,amp。segregs)。//You Can Through CreateFile() To Know The FileCode as test//printf(Successfully open file