Я указал открытый файл для процесса (демона) на моем компьютере, который запускает 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-узел / имя базового файла, чтобы получить доступ к этому сокету? Есть ли способ программно адресовать этот адрес 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
...
Я не гуру сетей / сокетов. Надеюсь, это может дать больше информации
PS: честно говоря, я сначала разместил этот вопрос на StackOverflow (извините, я не думаю, что ServerFault пока первый взгляд), но, похоже, никто не дает ответа. : / тот же вопрос по SO
Сокет AF_UNIX может быть не привязан к имени файла, быть «безымянным» (или также «абстрактным», в этом случае он имеет имя, но не имеет ничего общего с файловой системой), по крайней мере, в Linux. Вряд ли OS X отличается. Для получения дополнительной информации см. Справочную страницу для привязки функции сокета (или посмотрите документацию разработчика).
В любом случае, если OS X имеет эквивалент файловой системы / proc, вы могли бы получить дескриптор сокета, просмотрев список файловых дескрипторов целевого процесса. YMMV. Упс, у него нет procfs. Видеть этот о конкретных решениях для Mac.
Сокеты домена Unix имеют inodes и поэтому могут быть связаны. Обычно вы ожидаете, что они проявят себя в виде специального файла где-нибудь в файловой системе.