Solaris 中究竟是如何实现匿名管道的?
How exactly are anonymous pipes implemented in Solaris?
我正在尝试了解 Unix 管道,但找不到有关 Solaris 匿名管道的任何信息,这些管道是使用 pipe(2) 之类的东西创建的。
据我所知,这个系统调用在内核的某处创建了一个缓冲区space,并且使用vfs和vnode(这部分不确定)以文件描述符链接读写结束。
但是在内核中创建的缓冲区是什么 space?它是如何实现的,与通常的字节数组有什么区别?
最终答案(如果有人发现并对此感兴趣):这个在内核 space 中创建的缓冲区是使用 STREAMS 实现的:(来源:illumos gate 中的 fifonode.h,感谢 jamieguinan)
struct msgb *fn_mp; /* message waiting to be read */
struct msgb *fn_tail; /* last message to read */
关于 struct msgb(STREAMS 的一部分)的信息可以在 man msgb(9) 中阅读。
考虑使用 Solaris 门。它们是在 Solaris 中广泛使用的一种快速 IPC 机制。您可以找到有关 docs.oracle.com 的文档以及博客和 Illumos-gate https://github.com/illumos/illumos-gate
中的许多示例
我正在尝试了解 Unix 管道,但找不到有关 Solaris 匿名管道的任何信息,这些管道是使用 pipe(2) 之类的东西创建的。
据我所知,这个系统调用在内核的某处创建了一个缓冲区space,并且使用vfs和vnode(这部分不确定)以文件描述符链接读写结束。
但是在内核中创建的缓冲区是什么 space?它是如何实现的,与通常的字节数组有什么区别?
最终答案(如果有人发现并对此感兴趣):这个在内核 space 中创建的缓冲区是使用 STREAMS 实现的:(来源:illumos gate 中的 fifonode.h,感谢 jamieguinan)
struct msgb *fn_mp; /* message waiting to be read */
struct msgb *fn_tail; /* last message to read */
关于 struct msgb(STREAMS 的一部分)的信息可以在 man msgb(9) 中阅读。
考虑使用 Solaris 门。它们是在 Solaris 中广泛使用的一种快速 IPC 机制。您可以找到有关 docs.oracle.com 的文档以及博客和 Illumos-gate https://github.com/illumos/illumos-gate
中的许多示例