Presentation is loading. Please wait.

Presentation is loading. Please wait.

作業系統實習課(四) -檔案管理- 實驗室:720A 助教:鄧執中.

Similar presentations


Presentation on theme: "作業系統實習課(四) -檔案管理- 實驗室:720A 助教:鄧執中."— Presentation transcript:

1 作業系統實習課(四) -檔案管理- 實驗室:720A 助教:鄧執中

2 期末考 6/24(三)下午 1:10~3:00 範圍:Ch5,Ch7,Ch12,Ch13 地點:電機大樓 204。
地點:電機大樓 204。 PS:Close book,請攜帶學生證。

3 複習 1.創建.c檔: vim XXXX.c -第2堂課因為vi不好用所以安裝了vim編輯器,所以不要再打成
vi了!! 不要再打成vi了!! 不要再打成vi了!! -記得後面的.c 不然無法編譯 2.編輯檔案: -按i進入插入模式,Esc退出模式 -進入插入模式後,操作跟FB聊天相同 -編輯完之後,按esc退出插入模式並按shift+;進入指令模式,輸 入wq後按下enter。(=存檔 (w)+離 開(q))

4 3.編譯檔案: gcc XXXX.c –o XXXX -gcc是linux的C編譯器之一,-o指令的意思是我們要把編譯完 的.exe檔取名為XXXX 4.一般來說如果檔案是放在環境變數path路徑下只要輸入XXXX按下 enter即可執行(系統會直接到path路徑去找檔案),但是我們不在 /path下的資料夾創檔,所以要給他路徑,請輸入 ./a/b/b(路徑名) XXXX(執行檔名) ,在linux中所有的東西都是檔案和目錄,在我們 進入 cygwin之後都會在使用者的主目錄/中,如果你沒有進到別 的目錄去創檔案,就直接打上./XXXX 按下enter即可執行

5 低階檔案存取 我們開啟的process都會伴隨者檔案描述子(file descriptors) 檔案描述子用來存取檔案和設備
檔案描述子以正整數表示 當一個程式開始時通常都開啟以下三的檔案描述子 0:標準輸入(鍵盤) 1:標準輸出(螢幕) 2:標準錯誤輸出(螢幕) precess關閉時會連帶關閉所有檔案描述子的連接

6 write 原型: #include<unistd.h>
size_t write(int files, const void *buf, size_t nbytes); int files:檔案描述子號碼 const void *buf:要寫入的佔存器 size_t nbytes:要寫入的位元組數目 write會將buf前面n bytes位元組寫入此描述子代表的檔案中,並 回傳寫入的位元組數量,如果沒寫入任何資料回傳0,錯誤回傳-1

7 範例:simple_write.c 將字串Here is some data寫入1號描述子中(加上\n共18字)
1號描述子會自動將資料輸出到螢幕

8 read 原型: #include<unistd.h>
size_t read(int files, const void *buf, size_t nbytes); read會從files連接的檔案中讀取n bytes的資料並存放到buf中,回 傳讀取到的位元組數量,若沒有讀取到資料則回傳0,錯誤回傳-1

9 範例:simple_read.c 把buffer中的字串寫入1號檔案描述子
使用echo指令把hello word傳到simple_read.exe中的0號描述子 再用read把0號描述子的內容讀到buffer,最後把buffer寫入1號

10 使用” < “將simple_write.c傳到simple_read的0號,再由simple_read 印出前面的128個字元

11 open 為檔案或設備建立一個新的檔案描述子,並回傳其號碼。如果失 敗則回傳-1 新的描述子都會挑選最小、未使用的號碼 原型:
#include<fcntl.h> #include<sys/types.h> (某些UNIX系統需要) #include<sys/stat.h> (某些UNIX系統需要) int open(const char *path, int oflags); int open(const char *path, int oflags,mode_t mode);

12 const char *path:”要開啟存取的檔案名稱” int oflags: O_RDONLY:唯讀模式 O_WRONLY:唯寫模式 O_RDWR:可讀可寫模式 可與or運算子( | ) 連接 O_APPEND:將資料寫道檔案結尾 O_TRUNC:放棄現存的內容,設定檔案長度為0 O_CREAT:產生檔案,如有需要可在mode指定權限 mode_t mode:

13 lseek 設定檔案描述子讀寫的位置 原型: #include<unistd.h>
#include<sys/types.h> off_t lseek(int fildes, off_t offset, int whence); int fildes:檔案描述子號碼 off_t offset:指定位移量 int whence: SEEK_SET:offset是一個距離開頭的絕對位置 SEEK_CUR:offset是一個距離目前位置而言的相對位置 SEEK_END:是一個距離檔案結尾而言的相對位置

14 close 用來中止檔案描述子與檔案的關係,成功回傳0;失敗回傳-1 一個process能開的檔案描述子是有限的 原型:
#include<unistd.h> int close(int fildes);

15 實做: 利用system call把file.in拷貝到file.out
1&3: 利用open創建file.in與.out檔 2: 把 寫入.in檔 4: 印出in與out所獲得的描述子號碼 5&6: 使用lseek設定從in的第3號( )字元開始讀;從out的第2號(0 1 2)字 元開始寫 7: 用while迴圈重複讀寫工作,檔案 描述子會記錄目前寫讀的位置,下次 執行時會從下一個字元開始 結果: file.out內容: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15


Download ppt "作業系統實習課(四) -檔案管理- 實驗室:720A 助教:鄧執中."

Similar presentations


Ads by Google