作者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://webptt.com/cn.aspx?n=bbs/Linux/M.1618991484.A.DC9.html
※ 发信站: 批踢踢实业坊(ptt.cc)
※ 转录者: gowrite (1.173.190.241 台湾), 04/21/2021 15:51:40
1F:→ leolarrel: 一般状况下,fork出来的子行程会"继承"父行程的资源,包 04/21 16:15
2F:→ leolarrel: 括标准输出,标准输入,标准错误这三个 04/21 16:16
3F:→ leolarrel: 所以,他们不是global的,只是在生出子行程的时候子行程 04/21 16:17
4F:→ leolarrel: 会继承,当然子行程可以透过一些手段让自己的标准输出输 04/21 16:18
5F:→ leolarrel: 入指向别的目标物 04/21 16:18
6F:推 ucrxzero: 验证很简单 close(子行程的fd) 再让父行程 access 该fd 04/21 18:56
7F:→ ucrxzero: 04/21 18:56
8F:→ ucrxzero: fclose 04/21 18:56