我正在尝试理解Unix管道,我找不到有关Solaris匿名管道的任何信息,这些管道是用pipe(2)之类的东西创建的。
据我所知,这个系统调用在内核空间的某处创建了一个缓冲区,并且使用vfs和vnode将读取和写入的链接与文件描述符结束(不确定这部分)。
但是在内核空间中创建的缓冲区是什么?它是如何实现的,与通常的字节数组有什么不同?
最后的答案(如果有人发现这个并且感兴趣的话):在内核空间中创建的这个缓冲区是使用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中可以找到许多示例。