筆試簡答題1
1.緩沖文件系統和非緩沖文件系統的區別在程序中,對于文件的讀寫,程序運行時間主要消耗在I/O上。與讀寫硬盤上的文件慢很多;每次讀取和寫入文件的內容很少,那么程序運行時間主要消耗在I/O上。
文件緩沖系統:磁盤<---->緩沖池(0.5k)<---->二進制流(變量描述符集合)
解釋:系統會自動的給每一個正在使用的文件開辟一塊緩存區,緩存區的大小一般由各個C的版本規定,一般為512BYTE(0.5K)大小。從磁盤向內存讀取數據時,則一次將一些數據從磁盤送至內存緩沖區(滿載),然后在從緩沖區逐個將數據送給接收變量(文本描述符);從內存向磁盤寫入數據時,同樣先將數據填滿緩沖區,再一次性將數據從緩沖區送到磁盤。
形象理解:緩存區就類似一個中間的包文件,將單個的數據進行匯總,打包,然后進行傳送。這樣就減少了單個輸入輸出直接訪問磁盤的次數,減少對磁盤的實際讀寫次數。
依賴:文本結構體指針,可以進行讀寫字符、字符串、格式化數據等。
磁盤讀寫過程: 磁盤每次讀寫都要移動磁頭并尋找磁道扇區,花費一定的時間。
管理文件方式:緩沖文件系統是借助文本結構體指針來對文件進行管理,通過文件指針來對文件進行訪問,既可以讀寫字符、字符串、格式化數據,也可以讀寫二進制數據。
常用操作函數:緩沖文件系統函數一般是有f開頭的函數,如fopen(),fwrite(),fread()等。
緩沖文件輸入輸出:標準輸入輸出(標準I/O)--緩沖的I/O操作
注:全緩沖I/O和行緩沖I/O
全緩沖I/O:在緩沖區填滿后才進行實際的I/O操作。在磁盤上的文件常常使用標準I/O庫函數實施全緩沖。
行緩沖I/O:指在輸入或輸出中遇到換行符時,執行實際的I/O操作。
形象圖解:
非文件緩沖系統:磁盤(文件) <-----> 二進制文件(變量流)
解釋: 非文件緩沖系統不會自動分配緩沖區,需要用戶根據自己的需要去設置,在傳統的UNIX下,用緩沖文件系統處理文本文件,用非緩沖文件系統來處理二進制文件。非緩沖文件系統依賴操作系統,通過操作系統的功能對文件進行讀寫,是系統級的輸入輸出,他不涉及文本結構指針,只能讀寫二進制文件,但效率高、速度快。ANSI標準不再包括非緩沖文件系統。
依賴:操作系統
特點:只能讀寫二進制文件, 效率高、速度快,在遇到突發事件時(例如斷電),內容不會丟失。
缺點:頻繁進行I/O操作,非常消耗CPU。
常用操作函數:open() ,read(),write(),lek(),clo()等。
非緩沖文件系統輸入輸出:系統輸入輸出(系統I/O)
形象圖解:
筆試簡答題2
2.open和fopen的區別1.open為非緩沖文件系統操作函數,無緩沖;fopen為緩沖文件系統操作函數,中間有緩沖區。
2.open一般打開系統文件,在POSIX中定義;fopen打開普通文件,在標準C語言庫里面定義。即open是系統調用,fopen是標準庫調用。
3.open不能移植,fopen可移植。
4.open返回文本描述符(整數),fopen返回文本結構指針。
5.fopen進行讀寫操作時,減少了用戶態和內核態的切換,open每次都需要進行內核態和用戶態的切換,整體速度較慢。
順序訪問文件:fopen系列的函數要比直接調用open系列快;隨機訪問文件:open要比fopen系列快。
6.open可以指定權限,而fopen不能指定文件創建的權限。
Linux系統架構:
注:
應用程序可以通過調動Linux系統調用接口編程,也可以使用標準庫編程。C標準庫函數本身也是通過系統調用接口(操作系統API)實現的。
下面是相關的參考文獻:
緩沖I/O與非緩沖I/O(fopen與open系列函數區別) 系統調用與C庫 - Tim的嵌入式之旅 - CSDN博客
Linux(C/C++)下的文件操作open、fopen與freopen - Boblim - 博客園
本文部分內容參考至網絡,如有錯誤,敬請指正,如有侵權,請聯系修改。
本文發布于:2023-02-28 20:14:00,感謝您對本站的認可!
本文鏈接:http://m.newhan.cn/zhishi/a/167766520382561.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:fopen(fopen.doc
本文 PDF 下載地址:fopen(fopen.pdf
| 留言與評論(共有 0 條評論) |