今天学shell script技巧的时候,发现有人提到zsh可以用Unix域套接字代替命名管道实现主程序和子进程间的管道通信(全双工),之前没见书里这么做过感觉会很好用就赶紧试了下,发现每次监听端close()之后想复用现有的套接字文件都必须先删除旧文件才行……就……感觉有病……

很好奇为什么这么有病,查了资料发觉Linux上的AF_UNIX出于api一致性考量不允许重新复用磁盘上现有的空套接字文件。于是每次建ipc通道之前都要在vfs层面做文件写入的操作……要是运行环境没有tmpfs的话想要用这个方法做ipc就必须得像Solaris那样在/dev里写浪费磁盘空间的不知有什么〇用的东西了……感觉写*nix shell麻烦一堆,而且不知道什么时候就没法用了,下次再看到往家目录里写socket文件的破软件(基本上都是兼容bsd的那种)可以骂上一句了。

*nix shell中的首尾接合管道: unix.stackexchange.com/questio
AF_UNIX类socket复用: gavv.net/articles/unix-socket-
跟标准抠字眼: stackoverflow.com/questions/15
吐糟: mail-archive.com/tech-kern@net
mail-archive.com/tech-kern@net

Sign in to participate in the conversation
小森林

每个人都有属于自己的一片森林,也许我们从来不曾走过,但它一直在那里,总会在那里。迷失的人迷失了,相逢的人会再相逢。愿这里,成为属于你的小森林。