我列出了运行 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,因此可以链接。您通常会期望它们在文件系统的某个地方显示为特殊文件。