fork父子程序對開啟檔案的共享

2022-04-08 20:12:28 字數 605 閱讀 3132

父子程序是共享檔案表(檔案狀態標誌、當前檔案偏移量和v節點指標)的,和相互獨立程序不一樣。

詳細見unix高階環境程式設計p175.

#include #include #include #include #include #include int main(void)

close(fd);

exit(1);

}

sleep(2); //使先執行子程序,再執行父程序。
//!!!為什麼要lseek()?父子程序共享檔案表!
//即執行完子程序後,檔案偏移量已指向檔案尾,因為父子程序檔案偏移量相同,
//所以父程序也指向檔案尾,要讀檔案,必須重新設定檔案偏移量。

lseek(fd, 0, seek_set);

char read_buff[256];

if (read(fd, read_buff,len) < 0) //雖然子程序關閉了描述符,但父程序仍可程序讀寫操作。

read_buff[len] = '\0';

printf("%s\n", read_buff);

return 0;

}

linux中fork對開啟檔案的處理

1 子程序複製父程序的資料段 bbs段 段 堆空間 棧空間和檔案描述符 2 對於檔案描述符採用共享的方式 後面這個例子可以清晰的看出 1 include 2 include 3 include 4 include 5 include 6 include 7 8int main 923 父程序向檔案寫...

Unix程序對開啟檔案的管理

看下圖 系統維護乙個程序表,乙個程序對應程序表裡面的乙個程序項,程序項裡包含了此程序開啟的所有檔案的檔案描述符表資訊。系統為所有開啟的檔案維護一張檔案表,每個程序的每乙個檔案描述符對應乙個檔案表項。檔案表項裡有乙個v節點表項指標,指向v節點表。v節點表在記憶體中,乙個v節點表項對應乙個檔案,儲存了檔...

fork 父子程序變數之間的關係

呼叫fork,會有兩次返回,一次是父程序 一次是子程序,因為子程序是父程序的副本,所以它擁有父程序資料空間 棧和堆的副本,它們並沒有共享這些儲存空間,它們只共享正文段。我們通過下面的程式驗證下。程式的輸出 this is the child process 20415,7,11 this is th...