国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 操作系統 > 正文

x01.os.13: 文件系統

2024-06-28 13:23:26
字體:
來源:轉載
供稿:網友
x01.os.13: 文件系統

停了兩天電,忽然得空閑。找來破吉他,已然不成弦。

丁丁當當敲,敲到電來到。為把時間撿,熬夜三四點。

從我的置頂隨筆 x01.Lab.Download 中下載 x01.os.12.tar.gz, 解壓后由終端進入 os 目錄,輸入 bochs 命令即可見到如下界面:

注意下面的四行,分別是 open,write, read, unlink 文件。調用代碼如下:

 1 void TestA() { 2     int fd, n; 3     char path[] = "/test"; 4     char bufw[] = "hello"; 5     const int Len = 3; 6     char bufr[Len]; 7  8     fd = open(path , O_CREAT | O_RDWR); 9     PRint("fd: %d/n", fd);10 11     n = write(fd, bufw, StrLength(bufw));12     Print("write ok!/n");13 14     close(fd);15 16     fd = open(path, O_RDWR);17     n = read(fd, bufr, Len);18     bufr[n] = 0;19     Print("read: %s/n", bufr);20 21     close(fd);22 23     if (unlink(path) == 0)24         Print("unlink file: %s", path);25 26 //    Spin("TestA");27     while (1) {28             MilliDelay(2000);29         }30 }
TestA

按 F2 后,可切換到 tty2, 分別輸入 hello 回車,this is a test 回車,可看到如下界面:

其調用代碼如下:

 1 void TestB() { 2     char ttyName[] = "/dev_tty1"; 3     int stdin = open(ttyName, O_RDWR); 4     Assert(stdin == 0); 5     int stdout = open(ttyName, O_RDWR); 6     Assert(stdout == 1); 7     char buf[128]; 8  9     while (1) {10         write(stdout, "$ ", 2);11 //        Spin("write");12         int r = read(stdin, buf, 70);13         buf[r] = 0;14         if ( StrCompare(buf, "hello") == 0 ) {15             write(stdout, "hello world!/n",  13);16         } else {17             if (buf[0]) {18                 write(stdout, "{", 1);19                 write(stdout, buf, r);20                 write(stdout, "}/n", 2);21             }22         }23     }24 25     Assert(0);26     while (1) {27             MilliDelay(2000);28         }29 }
TestB

兩向對照,不難看出,文件的打開,讀寫,刪除等功能已經具備,而 tty 也成功納入了文件系統。

文件系統,本身并不復雜,不過超級塊和索引節點兩個結構。但文件系統的實現,卻頗為繁難,不僅涉及到硬盤的操作,而且也涉及到 tty,進程間通信等諸多方面。在某種意義上講,文件系統處于整個操作系統的核心。因為用戶程序本身,也不過是個文件而已。搞清文件系統,一是看書,二是看代碼,別無他途。

耗時多日,終于將文件系統運行成功,是為記。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 青龙| 墨竹工卡县| 富裕县| 江陵县| 淮北市| 宁蒗| 宁津县| 泗水县| 富宁县| 杭锦后旗| 南澳县| 高淳县| 唐海县| 宜君县| 瑞安市| 迁安市| 吐鲁番市| 神池县| 印江| 溧水县| 龙州县| 葫芦岛市| 北川| 桦川县| 炎陵县| 三都| 玉树县| 杭锦后旗| 南京市| 蒲江县| 中卫市| 白玉县| 平远县| 郸城县| 延寿县| 潮州市| 芒康县| 保康县| 咸阳市| 新河县| 宾川县|