gpt4 book ai didi

c++ - UNIX 文件描述符重用

转载 作者:太空狗 更新时间:2023-10-29 19:49:42 27 4
gpt4 key购买 nike

虽然我已经合理地习惯了 UNIX 并在其上编程了很长时间,但我不习惯文件操作。

我知道 0/1/2 文件描述符是标准的输入、输出和错误。我知道每当一个进程打开一个文件时,它都会得到一个尚未使用的最小值的描述符——我了解一些关于使用 dup/dup2 的事情。

虽然我对进程之间的文件描述符感到困惑。每个进程是否都有自己的 0/1/2 描述符用于输入/输出/错误,或者这 3 个描述符是否在所有进程之间共享?为什么可以在 3 个不同的 shell 中运行 3 个程序,如果它们是共享的,它们都只会得到它们的程序输出?

如果两个程序在启动后打开 myfile.txt,它们会都使用文件描述符 #3,还是第二个程序会使用 #4,因为 3 被占用了?

我知道我在那里以几种方式问过同样的问题,但我只是想说清楚。越详细越好 :) 我在编程时从来没有遇到过这些问题,但我正在阅读一本 UNIX 书籍以了解更多,我突然意识到这让我很困惑,我从来没有想过它之前的详细信息。

最佳答案

每个文件描述符都是进程本地的。但是,某些文件描述符可以引用同一个文件 - 例如,如果您使用 fork() 创建子进程,它将共享父进程打开的文件。它会有自己的一组文件描述符,最初与父文件描述符相同,但它们可以随着关闭/复制等而改变。

如果两个程序打开同一个文件,通常它们会得到不同的文件描述符,指向不同的内部结构。但是,使用某些技术(fork、FD 传递等),您可以让不同进程中的文件描述符指向同一内部实体。但是,通常情况并非如此。

回答你的问题,两个程序都会有 FD #3 用于新打开的文件。

关于c++ - UNIX 文件描述符重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7115735/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com