假设我使用打开文件open()
。然后我fork()
我的程序。
现在,父亲和孩子会为文件描述符共享相同的偏移量吗?
我的意思是,如果我在父亲那里写书,那么偏移量也会在孩子身上改变吗?
还是在fork()
?之后偏移是独立的?
来自fork(2)
:
* The child inherits copies of the parent’s set of open file
descrip-
tors. Each file descriptor in the child refers to the same
open
file description (see open(2)) as the corresponding file
descriptor
in the parent. This means that the two descriptors share open
file
status flags, current file offset, and signal-driven I/O
attributes
(see the description of F_SETOWN and F_SETSIG in fcntl(2)).
处理文件描述符 尽管很不像,但是在大多操作系统中,标准输入输出流 stdin 和 stdout 虽然叫做「流」,但它们都有文件的接口。我们同样也会将它们实现成为文件。 但是不用担心,作为文件的许多功能,stdin 和 stdout 都不会支持。我们只需要为其实现最简单的读写接口。 进程打开的文件 操作系统需要为进程维护一个进程打开的文件清单。其中,一定存在的是 stdin stdout 和 std
问题内容: 我在Linux上有两个进程A和B。我想与进程B共享进程A的文件描述符,现在我只是将其序列化为a 并将其传递给参数,但这是行不通的。 Ac看起来像这样: BC看起来像这样: 但这是行不通的,我也不明白为什么不这样做。我该如何进行这项工作?如果它的工作原理,它是经过共享父母和孩子之间的文件描述符的最佳解决方案和一个? 更新资料 该问题与我提出的问题无关,这是由@OliCharleswort
问题内容: 如何防止跨fork()系统调用复制文件描述符(当然,不关闭文件描述符)? 我正在寻找一种方式来纪念 一个文件描述符 作为 不被继承(复印通) (如果你喜欢这么FD_DONTINHERIT功能)通过孩子fork()的,有点像FD_CLOEXEC般的技巧,但对于叉。有人这样做吗?或对此进行了调查,对我有一个提示? 谢谢 更新: 我可以使用libc的__register_atfork 在fo
文件描述符 Linux很重要的设计思想就是一切皆文件,网络是文件,键盘等外设也是文件,很神奇吧?于是所有资源都有了统一的接口,开发者可以像写文件那样通过网络传输数据,我们也可以通过/proc/的文件看到进程的资源使用情况。 内核给每个访问的文件分配了文件描述符(File Descriptor),它本质是一个非负整数,在打开或新建文件时返回,以后读写文件都要通过这个文件描述符了。 应用 我们想想操作
文件描述符接口 函数 int fd_new (void) 分配文件描述符 struct dfs_fd * fd_get (int fd) 获取文件描述结构 void fd_put (struct dfs_fd *fd) 放置文件描述符 int fd_is_open (const char *pathname) 判断文件是否已被打开 int select (
问题内容: 有没有办法在原始文件描述符而不是FILE *上执行ftell()的操作(返回文件中的当前位置)?我认为应该有,因为您可以使用lseek()查找原始文件描述符。 我知道我可以使用fdopen()创建与文件描述符相对应的FILE *,但我宁愿不这样做。 问题答案: 只需使用: