Fw: [問題] file descriptor 檔案描述符的問題

看板LinuxDev作者 (gowrite)時間1年前 (), 編輯推噓1(107)
留言8則, 2人參與, 1年前最新討論串1/1
※ [本文轉錄自 Linux 看板 #1WVzbyt9 ] 作者: gowrite (gowrite) 看板: Linux 標題: [問題] file descriptor 檔案描述符的問題 時間: Wed Apr 21 15:51:22 2021 大家好,想詢問一下,一個觀念問題, 看到書上說,program 執行的時候, shell 會幫忙開啟 3 個檔案描述符,分別是 stdio (0) stdout (1) stderr (2) 這個我了解, 我的問題在於, 請問這 3 個 fd 是 global 的嗎? 意思就是 process A / process B / process C, 這 3 個 processes 在運行的時候, 所拿到 stdin, stdout, stderr 是同樣的 fd 嗎? 還是是分別在各自的 name space 裡面? 意思就是, process A 的 stdin ,與 process B 的 stdin 不同? 有什麼方法可以驗證嗎? 謝謝 還請各位前輩解惑了, 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.173.190.241 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1618991484.A.DC9.html ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: gowrite (1.173.190.241 臺灣), 04/21/2021 15:51:40

04/21 16:15, 1年前 , 1F
一般狀況下,fork出來的子行程會"繼承"父行程的資源,包
04/21 16:15, 1F

04/21 16:16, 1年前 , 2F
括標準輸出,標準輸入,標準錯誤這三個
04/21 16:16, 2F

04/21 16:17, 1年前 , 3F
所以,他們不是global的,只是在生出子行程的時候子行程
04/21 16:17, 3F

04/21 16:18, 1年前 , 4F
會繼承,當然子行程可以透過一些手段讓自己的標準輸出輸
04/21 16:18, 4F

04/21 16:18, 1年前 , 5F
入指向別的目標物
04/21 16:18, 5F

04/21 18:56, 1年前 , 6F
驗證很簡單 close(子行程的fd) 再讓父行程 access 該fd
04/21 18:56, 6F

04/21 18:56, 1年前 , 7F
04/21 18:56, 7F

04/21 18:56, 1年前 , 8F
fclose
04/21 18:56, 8F
文章代碼(AID): #1WVzcDe4 (LinuxDev)
文章代碼(AID): #1WVzcDe4 (LinuxDev)