操作系统实践(二)
??本節(jié)課的主要內(nèi)容是:文件讀寫(xiě)。在C語(yǔ)言中,我們可以使用fopen,fclose等函數(shù)進(jìn)行文件操作。但下放到操作系統(tǒng)層次,就是一些文件的系統(tǒng)調(diào)用了。本節(jié)的主要內(nèi)容也就是介紹下與文件相關(guān)的一些系統(tǒng)調(diào)用。
??我發(fā)現(xiàn)自己寫(xiě)的,遠(yuǎn)沒(méi)有老師提供的資料全面。所以在這里,我就直接用圖片說(shuō)明內(nèi)容啦~
??以上就是本節(jié)的主要理論學(xué)習(xí)內(nèi)容,下面還有三個(gè)作業(yè)進(jìn)行鞏固,我就把自己的答案附在上面,可能不是很簡(jiǎn)潔,但我后面會(huì)慢慢的進(jìn)行修改完善滴~
一、練習(xí)一:
#include<stdio.h> int main(int argc, char *argv[]) {// argc的參數(shù)計(jì)算是從頭開(kāi)始的,所以使用./a.out也算一個(gè),真正的參數(shù)是從索引1開(kāi)始for (int i=1; i<argc; i++) {// argv是指針數(shù)組,使用的時(shí)候要注意。因?yàn)檫@里面測(cè)試的樣例是字符,所以用%s和%c都可以//但是puts不可以,puts輸出的只能是常量字符串printf("%s ", argv[i];printf("%c ", *(argv[i]));// puts(argv)}printf("\n"); }??寫(xiě)這個(gè)的時(shí)候,遇到這樣一個(gè)直接的問(wèn)題:不定參數(shù)如何輸入?原來(lái)在main函數(shù)中,它的參數(shù)列表就可以作為它的不定輸入。設(shè)定argc和argv。其中argc代表輸入?yún)?shù)個(gè)數(shù),argv代表輸入?yún)?shù)內(nèi)容。更為詳細(xì)的內(nèi)容的可以參考:https://www.cnblogs.com/x_wukong/p/5326557.html
??還有就是,輸出的時(shí)候會(huì)出現(xiàn)一種這樣的情況:輸出的最后總是有個(gè)%,這是怎么回事呢?其實(shí)這個(gè)就是Linux下一個(gè)習(xí)慣,提示輸出到了最后。如果不想要的話,可以在最后增加一個(gè)換行符(這個(gè)問(wèn)題困擾了我很久,感謝https://segmentfault.com/q/1010000004687388)
二、練習(xí)二:
??思路:因?yàn)槲募?nèi)內(nèi)容長(zhǎng)度的不確定性,不想數(shù)據(jù)庫(kù)那樣有嚴(yán)格的結(jié)構(gòu)體。這里利用read讀文件如果到文件底會(huì)返回0做判斷,同時(shí)read返回值就是文件讀出來(lái)的字節(jié)count改變偏移量offset。以offset作為lseek偏移數(shù),不斷累加,進(jìn)行讀取。源碼如下:
??效果圖如下:
三、練習(xí)三:
??思路:讀取文件部分與問(wèn)題二一致,同時(shí)增加寫(xiě)文件部分,文件名為第二個(gè)傳入的參數(shù)值。源代碼如下(代碼是有問(wèn)題的,問(wèn)題在下面說(shuō)):
??問(wèn)題:這個(gè)代碼在執(zhí)行的時(shí)候,在終端輸出的是沒(méi)有問(wèn)題的。但寫(xiě)入到目標(biāo)文件中的內(nèi)容,最終會(huì)出現(xiàn)一行亂碼(長(zhǎng)度恰好是100),如下圖:
??有問(wèn)題是好事,等我解決了,再補(bǔ)充說(shuō)明吧~
??呼,第二次實(shí)驗(yàn)結(jié)束,繼續(xù)加油!
因作者水平有限,如有錯(cuò)誤之處,請(qǐng)?jiān)谙路皆u(píng)論區(qū)指出,謝謝各位!
總結(jié)
- 上一篇: Redis 与 hash (哈希)相关的
- 下一篇: python import loggin