區分共享檔案的兩種形式

2021-10-07 10:47:27 字數 1201 閱讀 6064

共享檔案至的是,兩個不同的檔案描述符,但是引用的是同乙個檔案,就叫做檔案在檔案描述符fd1和fd2之間共享;

作業系統中主要是三種資料結構表示檔案;

1) 檔案描述符表,每個程序都有自己的檔案描述符表;

2) 核心中的檔案表, 檔案表中有檔案偏移位置, 指向v節點表的指標;

3) 核心中的v節點表, v節點表有大部分檔案的資訊;

1) 通過open開啟兩個相同的檔案

兩個檔案描述符指向不同的檔案表,這種形式雖然共享檔案,但是不共享檔案位置偏移;對不同的檔案描述符進行操作可以從同乙個檔案中的不同位置讀取資料;

2) 父子程序之間共享同乙個檔案

父程序建立子程序的時候, 子程序得到父程序的檔案描述符。由於檔案表存在於核心中, 子程序肯定複製不了檔案表的副本;此時父子程序的檔案描述符指向同乙個檔案表表項。這種形式, 父子程序不僅僅共享檔案,還共享檔案位置偏移;

兩個檔案描述符不共享愛你個檔案位置偏移:

int

main()

上述程式輸出是f;

2) 兩個檔案描述符共享檔案位置偏移

int

main()

wait

(null);

read

(fd,

&c,1);

printf

("c = %c\n"

, c)

;exit(0);}

上述程式輸出是o

int dup2(int oldfd,

int newfd)

;

dup2 函式使得newfd丟棄自己的檔案表項,指向oldfd的檔案表項;

最後的結果是, newfd和oldfd共享oldfd的檔案表表項, 如圖所示:

上述**的輸出是

共享的兩種方式

共享有兩種,這裡的共享可以理解為復用,分為時間上的復用和空間上的復用,時間上的復用的乙個典型的例子就是分時系統分時使用cpu,cpu將所有時間分成若干個段,每個程序使用一段時間,然後讓出cpu,之後排程邏輯會挑選另外乙個程序來使用cpu的接下來的時間段 空間上的復用的乙個典型的例子就是早期的多道程式...

C C 的兩種多型形式

1 2 test.cpp4 5 created by mac on 15 8 11.6 7 8 include9 include10 using namespace std 11class person 基類person12 25person person 26 person person stri...

include的兩種指令形式

在程式設計過程中不在意的細節 搬運於c程式設計 include include stdio.h include使用尖括號的形式時,編譯系統從存放c編譯系統的子目錄中去找所要包含的檔案如 stdio.h 這稱為 標準方式 若使用 include指令是為了使用系統庫函式,因而要包含系統提供的相應標頭檔案...