本週的內容爲系統級I/O的方式,主要是對各類應用調用的I/O函數進行了瞭解,如下是本週內容的總結:html
int open(char *filename, int flags, mode_t mode)
,其中flag是進程對文件的操做行爲,mode爲訪問權限位。函數返回一個文件描述符int close(int fd);
ssize_t Read(int fd, void *buf, size_t count);
ssize_t Write(int fd, const void *buf, size_t count);
ssize_t rio_readn(int fd, void *usrbuf, size_t n); ssize_t rio_writen(int fd, void *usrbuf, size_t n);
ssize_t rio_readnb(rio_t *rp, void *usrbuf, size_t n); ssize_t rio_readlineb(rio_t *rp, void *usrbuf, size_t maxlen);
,其中帶緩衝的行讀取rio_readlineb與rio_readnb可加從使用,但帶緩衝區與不帶緩衝區的函數不能夠交叉使用,帶緩衝區的函數必須基於rio_read
函數int stat(const char *filename, struct stat *buf); int fstat(int fd, struct stat *buf);
DIR *opendir(const char*name);
以及struct dirent *readdir(DIR *dirp);
其中實際使用中須要反覆調用readdir函數這裏我使用read函數做爲例子。
一、使用man -k read | grep 2
命令查看read系統調用。
二、使用man -k read | grep 2 | grep file
命令可在1的基礎上進一步縮小範圍。
三、使用grep -nr xxx /usr/include
命令查看宏定義,其中n表示顯示行號,r表示遞歸。下圖查看了關鍵字爲MAXLINE的宏定義。
git
本週內容多爲代碼實踐,教材中沒有遇到問題。安全
問題1:運行教材代碼1的時候出現如圖所示問題。
問題1解決方法:發現是沒有添加正確的頭文件,添加頭文件後正常運行。
問題2:練習10.1輸出爲-1,與實際不符。
問題2解決方法:沒有建立代碼中須要的文件,建立文件後正常運行。
問題3:練習10.3編譯後出現以下錯誤:
問題3解決方法:經過man 2 wait
查找到所需的頭文件,添加後正常運行。
函數
附上練習5運行結果:
工具
本週內容爲系統級I/O,經過本章內容使我對系統基礎的I/O函數有了瞭解,這有助於自主實現系統功能,且使得我在沒法使用標準庫函數的時候有了相應的解決方法。學習
博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|
目標 | 30篇 | 400小時 | |
第三週 | 1/1 | 13/13 | |
第四周 | 1/2 | 22/35 | |
第五週 | 1/3 | 30/65 | |
第六週 | 1/4 | 25/90 | |
第七週 | 1/5 | 22/112 | |
第八週 | 1/6 | 25/137 |
嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進本身的計劃能力。這個工做學習中很重要,也頗有用。 耗時估計的公式 :Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。設計
參考:軟件工程軟件的估計爲何這麼難,軟件工程 估計方法3d