2017 Operating Systems 作業系統實習 助教:陳主恩、林欣穎 實驗室:720A Lab2
目錄 Contents 檔案管理介紹Beaglebone 檔案管理函式 Beaglebone 實作Beaglebone
檔案管理介紹 緩衝文件系統 緩衝文件系統的特點是:在記憶體設定一個「緩衝區」,為程序中的每一個文件使用,當執行讀文件的操作時,從磁碟文件將數據先讀入記憶體「緩衝區」, 裝滿後再從記憶體「緩衝區」依此讀入接收的變量。執行寫文件的操作時,先將數據寫入記憶體「緩衝區」,待記憶體「緩衝區」裝滿後再寫入文件。由此可以看出,記憶體 「緩衝區」的大小,影響著實際操作硬碟的次數,記憶體「緩衝區」越大,則操作外存的次數就少,執行速度就快、效率高。一般來說,文件「緩衝區」的大小隨機器而定。 fopen, fclose, fread, fwrite, fgetc, fgets, fputc, fputs, freopen, fseek, ftell, rewind等。 非緩衝文件系統 緩衝文件系統是藉助文件結構體指針來對文件進行管理,通過文件指針來對文件進行訪問,既可以讀寫字符、字符串、格式化數據,也可以讀寫二進位數 據。非緩衝文件系統依賴於作業系統,通過作業系統的功能對文件進行讀寫,是系統級的輸入輸出,它不設文件結構體指標,只能讀寫二進位文件,但效率高、速度 快,由於ANSI標準不再包括非緩衝文件系統,因此建議大家最好不要選擇它。 open, close, read, write, getc, getchar, putc, putchar 等。
open系列函數 fopen系列函數 一般用於打開設備文件(少數情況) 一般用於打開普通文件(大多數情況) 利用文件描述符操縱文件 檔案管理介紹 open系列函數 fopen系列函數 一般用於打開設備文件(少數情況) 一般用於打開普通文件(大多數情況) 利用文件描述符操縱文件 利用文件指標操作文件 open返回一個文件描述符 fopen返回一個文件指針 POSIX系統調用 ANSI C庫函數 低層次IO 高層次IO,對open的擴展和封裝 只能在POSIX操作系統上移植 可移植到任何操作系統 非緩衝IO 緩衝IO 只能讀取二進製或普通文本 可以讀取一個結構 可以指定要創建文件的訪問權限 不能指定要創建文件的訪問權限
參數說明:http://c.biancheng.net/cpp/html/238.html 檔案管理函式 open 三個參數:檔名、狀態符號以及存取權限。 open()系統呼叫若是執行成功,會傳回一個介於0~19之間的檔案描述詞,假使執行失敗則回傳值為-1。 #include <fcntl.h> int fd; int open(char *, int, int); fd = open(fname, flags, perms); perms是指被開啟的檔案之存取權限。 flags是指檔案將以何種模式開啟。 fname是指檔案的名稱。 fd 是指檔案描述詞。 參數說明:http://c.biancheng.net/cpp/html/238.html
檔案管理函式 close close()系統呼叫是用來關閉不再使用的檔案。 close()如果執行成功回傳值為0,萬一失敗則回傳值為-1。 #include <fcntl.h> int ret; ret = close(handle); #include <fcntl.h> close(handle);
檔案管理函式 write write() 系統呼叫對已開啟的檔案進行寫入的動作。 int number; number = write(handle, buffer, n); write(handle, buffer, n); handle:這是一個己經開啟的檔案代號,表示將資料寫入這個檔案代號所代表的檔案內。 buffer:指的是緩衝區,也就是把這個緩衝區的資料,寫入檔案代號所表示的檔案內。 n:表示呼叫一次write動作,應該寫入多少數量的字元。 number:表示系統實際所讀取的字元數量。
檔案管理函式 read read() 系統呼叫對已開啟的檔案進行讀取的動作。 int number; number = read(handle, buffer, n); read(handle, buffer, n); handle:這是一個己經開啟的檔案代號,表示從這個檔案代號所代表的檔案中讀取資料。 buffer:指的是緩衝區,也就是,所讀的資料會被放到這個緩衝區中。 n:表示呼叫一次read動作,應該讀多少數量的字元。 number:表示系統實際所讀取的字元數量。
實作 透過open產生名為open.c的檔案,再透過wirte將”Success Write!”寫入到open.c的檔案中,最後利用read將內容放置到一個buffer中,透過printf將buffer內容印出來。
Thanks 作業系統實習 Operating Systems