如何在 Mac OS X 上找到 Unix 域套接字的另一个点来写入/读取它?

如何在 Mac OS X 上找到 Unix 域套接字的另一个点来写入/读取它?

我列出了运行 Mac OS X 10.5 的机器上某个进程(守护进程)的打开文件:

>lsof  -p 89
COMMAND PID     USER   FD   TYPE    DEVICE  SIZE/OFF     NODE NAME
...
xxxxx   89 xxxxxxxx    9u  unix 0x34f8990       0t0          ->0x34f8880

我想找到一种方法来打开这个套接字并在其中写入内容。(这是我这次的痴迷......)

如何找到底层文件的 i-node/名称以到达该套接字?有没有办法从 shell 脚本中以编程方式寻址此地址 0x34f888?如果没有,如何以编程方式进行?

作为评论,我启动了 netstat 命令并得到以下结果:

> netstat -u
Active LOCAL (UNIX) domain sockets
Address  Type   Recv-Q Send-Q    Inode     Conn     Refs  Nextref Addr
...
 34f8990 stream      0      0        0  34f8880        0        0
...
 34f8880 stream      0      0        0  34f8990        0        0
...

我不是网络/套接字专家。希望这可以提供更多信息

附言:说实话,我首先在 StackOverflow 上发布了这个问题(抱歉,我暂时不认为这是对 ServerFault 的第一印象),但似乎没有人给出答案。:/ 同样的问题

答案1

AF_UNIX 套接字可以不与文件名绑定,即“未命名”(或“抽象”,即有名称但与文件系统无关),至少在 Linux 中是这样的。OS X 不太可能有所不同。有关详细信息,请参阅套接字函数 bind 的手册页(或查看开发文档)。

无论如何,如果 OS X 具有与 /proc 文件系统相当的文件系统,您可以通过查看目标进程的文件描述符列表来获取套接字的句柄。YMMV。哎呀,它没有 procfs。请参阅有关 Mac 的特定解决方法。

答案2

Unix 域套接字具有 inode,因此可以链接。您通常会期望它们在文件系统的某个地方显示为特殊文件。

相关内容