沉下心學作業系統(四)關於檔案

2021-09-13 12:31:46 字數 1275 閱讀 5286

​ 每個程序控制塊都有乙個檔案描述符表,可以把它看作乙個陣列,裡面儲存指向以開啟檔案位址的指標,這個陣列的下角標就是檔案描述符。每次open都會把新開啟的檔案位址儲存到表中的某個空行,並返回下角標作為檔案描述符。

​ 其中0~2為特殊的檔案描述符,分別為標準輸入,標準輸出,標準錯誤輸出,這三個檔案描述符在程序初始時自動開啟,其中標準輸出就是printf輸出的物件

open()

#include #include #include int open(const char* pathname, int flags, mode_t mode);
​ 相比fopen()處於系統的更低層,可以對檔案進行更基礎的操作,但是也失去了一些庫函式的幫助

​ 引數分別是被開啟檔案路徑、進行的操作、建立檔案時的使用許可權(可省略)

​ 它的返回值為檔案描述符

dup2()

#include int dup2(int oldfd, int newfd);
​ 該函式可以使newfd指向oldfd指向的檔案

dup()

#include int dup(int oldfd);
​ 該函式會選擇最小的空閒檔案描述符讓它指向oldfd,並返回新的指向該檔案的描述符

read()、write()

#include ssize_t read(int fd, void* buf, size_t count);

ssize_t write(int fd, const void* buf, size_t count);

​ 引數分別為檔案描述符,寫入/讀入的內容,寫入/讀入的最大長度。若呼叫成功返回實際讀寫的長度,否則返回-1

lseek()

#include #include off_t lseek(int fd, off_t offset, int whence);
​ 引數分別為檔案描述符,移動的長度,移動目標的起點。whence有3個常用值,seek_set,seek_end,seek_cur,分別代表開頭,結尾和當前位置

fsync()

int fsync(int fd);
​ 由於向磁碟寫入資料很花時間,因此核心為了提高效率會推遲寫入資料。而fsync()可以同步記憶體中所有已修改的檔案寫入到儲存裝置

close()

int close(int fd);
​ 用於關掉檔案,fd為檔案描述符

如果有寫的不對或者不全面的地方 可通過主頁的****進行指正,謝謝

四 作業系統 檔案管理

1 檔案 在系統執行時,計算機以 程序為基本單位進行資源的排程和分配 而在使用者的輸入輸出中,則以 檔案為基本單位 2 檔案結構 資料項 檔案系統中最低階的資料組織形式 包括基本資料項和組織資料項 記錄 一組相關的資料項的集合 檔案 有結構檔案中 檔案由一組相似記錄組成 無機構檔案中 檔案被看成乙個...

關於作業系統

計算機是分層的,這是計算機的複雜性和大量的需求導致的。複雜性體現在裝置的多樣性,單機模擬多工,硬體中斷機制帶來的不確定性。大量的需求體現在人們對計算裝置的需求,以及計算裝置減少大量的勞動力,以及計算裝置能完成大量勞動力也無法完成的事。複雜性帶來操作的不便,大量需求需要快速方便的操作計算機。在這個矛盾...

關於作業系統

1.作業系統 英文名稱operating system,簡稱os。常見系統 android,ios,linux,windows 作業系統是計算機系統中必不可少的基礎系統軟體,它是應用程式執行以及使用者操作必備的基礎環境支撐,是計算機系統的核心。作業系統是管理計算機硬體資源,控制其他程式執行並為使用者...