作者gowrite (gowrite)
看板LinuxDev
標題Fw: [問題] file descriptor 檔案描述符的問題
時間Wed Apr 21 15:51:40 2021
※ [本文轉錄自 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
→ leolarrel: 一般狀況下,fork出來的子行程會"繼承"父行程的資源,包 04/21 16:15
→ leolarrel: 括標準輸出,標準輸入,標準錯誤這三個 04/21 16:16
→ leolarrel: 所以,他們不是global的,只是在生出子行程的時候子行程 04/21 16:17
→ leolarrel: 會繼承,當然子行程可以透過一些手段讓自己的標準輸出輸 04/21 16:18
→ leolarrel: 入指向別的目標物 04/21 16:18
推 ucrxzero: 驗證很簡單 close(子行程的fd) 再讓父行程 access 該fd 04/21 18:56
→ ucrxzero: 04/21 18:56
→ ucrxzero: fclose 04/21 18:56