gpt4 book ai didi

operating-system - 为什么大多数 posix 命名对象都使用 unlink 设计?

转载 作者:行者123 更新时间:2023-12-04 15:22:44 26 4
gpt4 key购买 nike

大多数 POSIX 命名对象(或全部?)都具有取消链接功能。例如:
shm_unlink
mq_unlink
它们都有一个共同点,即从系统中删除对象的名称,导致下一次打开失败或创建新对象。
为什么要这样设计?我知道,这与“一切都是文件”的政策有关,但为什么不在关闭时删除文件?如果您创建一个新界面,您会这样做吗?
我认为,这有一个很大的缺点。比如说,我们有一个服务器进程和几个客户端进程。如果任何进程(错误地)取消了对象的链接,则所有新客户端都将找不到服务器。 (这可以被相应文件的用户权限禁止,但仍然......)
如果它有引用计数并且在最后一个对象关闭时名称会自动删除,那不是更好吗?为什么要保持打开状态?

最佳答案

因为它们是可以在性能很重要时使用的低级工具。在下次使用时不再使用该对象以再次创建该对象时,删除该对象会对保持其事件状态产生(轻微)性能损失。
我曾经使用过一个命名信号量,我用来同步对不同生产者和消费者的假脱机的访问。我使用了一个 init 模块来创建作为引导过程的一部分被调用的命名信号量,并且所有其他进程都知道众所周知的信号量应该存在。
如果您想要一种更程序员友好的方式来按需创建对象并在不再使用时销毁它,您可以构建一个更高级别的库并将创建/取消链接操作封装在其中。但是如果系统调用包含它,就不可能构建一个避免它的用户级库。

关于operating-system - 为什么大多数 posix 命名对象都使用 unlink 设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62954046/

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