В символической ссылке, указывающей на «127.0.1.1:+xxxxx», для чего нужен символ «плюс»?

52

В моей файловой системе Linux символическая ссылка указывает на 127.0.1.1:+xxxxx.

Почему знак плюс? Может ли быть минус? Почему не просто 127.0.1.1:xxxxx?

MyMethod
источник
Эта символическая ссылка в / proc?
Иисус Навин
4
@Joshua: Скорее всего, под ~ / .mozilla / или аналогичным. Firefox / Thunderbird и iirc Steam используют такие символические ссылки для блокировки.
Гравитация
2
Xxxxx - это число или символы xxxxx?
Мауг
2
Вероятно, не связано, но только для информации. В некоторых клиентах IRC знак плюс перед портом был указан, чтобы указать, что удаленный сервер использует SSL / TLS.
eKKiM

Ответы:

93

Символические ссылки, которые не указывают на файл, вообще не имеют общего значения. В этом случае это может быть идентификатор процесса, или порт с каким-то специальным протоколом, на котором говорят, или другой идентификатор. Все зависит от того, какая программа это сделала.

Программное обеспечение, которое создает эти ссылки, просто использует преимущества того факта, что 1) цель символической ссылки может отсутствовать или даже полная ерунда; 2) создание символической ссылки - это полностью атомарная операция с одним системным вызовом (как и чтение ее цели), в отличие от создания обычного файла, который принимает как минимум 3 отдельных системных вызова.

Таким образом, создание символической ссылки может использоваться как способ блокирования (обеспечения единственного экземпляра программы), даже когда другие механизмы могут быть ненадежными. Программа не нуждается в символической ссылке для фактического разрешения в реальном файле: она заботится только о том, удастся ли создать ссылку или нет, потому что она уже существует.

grawity
источник
5
«* в отличие от создания обычного файла, который принимает как минимум 3 отдельных системных вызова. *» - Не могли бы вы уточнить? Вы имеете в виду fopen, fwriteи fclose?
Ник Хартли,
11
@NicHartley: системные вызовы open(или, возможно, creatв старом программном обеспечении) write, а closeне версии f *, которые предоставляет stdio. Но, да, вам нужно сделать как минимум openи writeсоздать файл, и добавить в него что-то значимое. Теперь, если вы хотите, чтобы какой-то код «попытался создать его, если он успешен, вставил в него некоторую информацию, иначе, прочитал бы некоторую информацию из него», второй процесс мог бы просто попробовать его, readпрежде чем первый процесс сможет это сделать write. symlinkизбегает этого; либо успешно и создайте ссылку, либо потерпите неудачу и убедитесь, что readlinkесть информация для вас.
Гунтрам Блом поддерживает Монику
"... можно злоупотреблять как способ ..." Является ли это злоупотребление как "использовано так, как оно не было предназначено для использования" или "использовано так, как его не следует использовать"?
Парень со шляпой
22

Насколько я знаю, «+» означает, что число после IP («xxxxx») относится к «идентификатору процесса» (а не к порту, который обычно использует обозначение [IP-адрес]: [номер_порта]).

Возможно, что эта «нотация» (не уверен, что я бы назвал ее «нотацией», поскольку я не знаю какой-либо «официальной» документации) относится к чему-то другому, если используется конкретным приложением - но опять же, это всегда возможность не только с символическими ссылками. Единственные случаи, о которых я знаю (и мог найти с помощью поиска, который не был слишком обширным), «+ XXXX» всегда ссылался на идентификатор процесса.

Альбин
источник
1
Я только что проверил это. В моем случае это действительно так.
myMethod
1
Есть ли где-нибудь документация этого формата, на которую вы могли бы сослаться?
Дэвид Z
1
Не уверен, я просто помню это из опыта.
Альбин
2
Похоже, вы говорите о символической ссылке в специальном каталоге, например /procили /dev. Можете ли вы объяснить, для чего используется эта символическая ссылка?
Бармар
4
Это первый раз, когда я вообще видел эту запись, поэтому я удивлен, когда вы говорите, что это общая запись. Где вы видели, что раньше означало идентификатор процесса?
Бармар