系統程式設計 筆記5

2021-10-05 23:12:41 字數 1105 閱讀 5664

link unlink函式

在inode之外有個目錄項dentry,這並不多餘,這主要是為了實現檔案共享,linux允許多個目錄項共享同乙個檔案,link函式可以為已經存在的檔案建立目錄項(硬鏈結)

int link(const char *oldpath,const char *newpath)

成功返回0,失敗返回-1 並errno為相應的值。

int unlink(const char *path)

成功返回0,失敗返回負值。

對於刪除檔案,可以說是將檔案的硬鏈結刪除完,從而讓檔案具備被系統釋放的條件(可覆蓋)。unlink函式的特性:清除檔案時,如果檔案的硬鏈結數到0了,沒有dentry對應,但該檔案不會馬上被釋放。要等到所有開啟檔案的程序關閉該檔案,系統才會挑時間將該檔案釋放掉。

隱式**:當程序結束執行時,所有該程序開啟的檔案會被關閉,申請的記憶體空間會被釋放。(這是作業系統的特性,最好不要依賴)

目錄也是一種檔案,可讀屬性反映在ls tree…可寫屬性反映在mkdir touch….可執行屬性反映在:cd….

關於目錄的函式:

opendir函式:開啟乙個目錄,dir *opendir(const char *name);//類似於file *

closedir函式:int closedir(dir *dirp)//返回值什麼的可以通過man檢視

readdir函式:struct dirent *readdir(dir *dirp)//返回的是乙個目錄項,所以可以看出是乙個結構體,這其中的乙個結構體成員就是filename,就是檔名定義是:char d_name[256];所以檔名最大不能超過255位元組

dup函式:

函式原型:int dup(int oldfd);

oldfd:已有的檔案描述符

返回值:返回乙個新的檔案描述符

dup2函式:

函式原型:int dup2(int oldfd, int newfd);

此函式可以將舊檔案複製給新的檔案。

其實質是將pcb結構體複製到了新檔案描述符結構體中,這個結構體中有乙個指向檔案的指標成員,因為舊檔案它結構體中的指標和新檔案的是一樣的,那麼指標指向的檔案就都是同乙個檔案,也就是重定向。

系統程式設計 筆記6

程序 活的,執行起來的程式,占用記憶體,cpu等資源。戲 程式 死的,只占用磁碟空間 劇本 併發 在作業系統中,乙個時間段中有多個程序都處於已啟動執行到執行完畢之間的狀態。但,任意時刻點上仍只有乙個程序在執行。對於在核心空間裡的程序,它們通過mmu對映到磁碟空間是在同乙個區域,因為pcb本質是乙個結...

Linux 系統程式設計5 訊號

檢視linu下有哪些訊號 kill l 會用到訊號,比如你想結束掉乙個程序 ps aux 檢視程序 kill 結束程序 kill傳遞乙個訊號,訊號會導致程序終止 windows任務管理器也是一樣的道理,傳送乙個訊號,導致程序終止 man 7 signal linux中檢視訊號的機制ctrl c si...

linux 系統程式設計 5 執行緒

目錄7.3 設定執行緒屬性 參考乙個程序至少需要乙個執行緒作為它的指令執行體,程序管理著資源 比如cpu 記憶體 檔案等等 而將執行緒分配到某個cpu上執行 新的執行執行緒將擁有自己的棧,但與它的建立者共享全域性變數 檔案描述符 訊號處理函式和當前目錄狀態 特點 使用pthread create建立...