Назад | Перейти на главную страницу

Как найти другую точку сокета домена Unix в Mac OS X для записи / чтения?

Я указал открытый файл для процесса (демона) на моем компьютере, который запускает 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 и поэтому могут быть связаны. Обычно вы ожидаете, что они проявят себя в виде специального файла где-нибудь в файловой системе.