【问题标题】:How exactly are anonymous pipes implemented in Solaris?Solaris 中究竟是如何实现匿名管道的?
【发布时间】:2019-04-24 04:07:49
【问题描述】:

我正在尝试了解 Unix 管道,但我找不到任何有关 Solaris 匿名管道的信息,这些管道是使用 pipe(2) 之类的东西创建的。

据我所知,这个系统调用在内核空间的某处创建了一个缓冲区,并使用 vfs 和 vnode 以文件描述符链接读写结束(不确定这部分)。

但是在内核空间中创建的缓冲区是什么?它是如何实现的,与通常的字节数组有什么区别?

【问题讨论】:

标签: unix pipe solaris anonymous-pipes


【解决方案1】:

最终答案(如果有人发现并感兴趣):在内核空间中创建的这个缓冲区是使用 STREAMS 实现的:(来源:在 illumos 门中的 fifonode.h,感谢 jamieguinan)

     struct msgb    *fn_mp;     /* message waiting to be read */
     struct msgb    *fn_tail;   /* last message to read */

可以在 man msgb(9) 中读取有关 struct msgb(STREAMS 的一部分)的信息。

【讨论】:

    【解决方案2】:

    考虑使用 Solaris 门。它们是整个 Solaris 中使用的快速 IPC 机制。您可以在 docs.oracle.com 上找到文档,并在博客和 Illumos-gate https://github.com/illumos/illumos-gate

    中找到许多示例

    【讨论】:

      猜你喜欢
      • 2012-07-04
      • 1970-01-01
      • 2014-10-11
      • 2021-01-06
      • 1970-01-01
      • 1970-01-01
      • 2013-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多