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

5967
myMethod

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

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

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

2 ответа на вопрос

95
grawity

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

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

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

«* в отличие от создания обычного файла, который принимает как минимум 3 отдельных системных вызова. *» - Не могли бы вы уточнить? Вы имеете в виду `fopen`,` fwrite` и `fclose`? Nic Hartley 5 лет назад 5
@NicHartley: системные вызовы: `open` (или, может быть,` creat` в старом программном обеспечении), `write` и` close`, а не версии f *, которые предоставляет stdio. Но, да, вам нужно сделать хотя бы `open` и` write`, чтобы создать файл и добавить в него что-то осмысленное. Теперь, если вы хотите, чтобы какой-то код «попытался создать его, если он успешен, вставил в него некоторую информацию, иначе, прочитал бы некоторую информацию из него», второй процесс мог бы просто попробовать «прочитать», прежде чем первый процесс сможет write`. `symlink` избегает этого; либо успешно и создайте ссылку, либо потерпите неудачу и убедитесь, что `readlink` имеет информацию для вас. Guntram Blohm 5 лет назад 11
"... можно ** использовать как ** как" ... Является ли это злоупотребление, как в ", использовано так, как оно _не предназначено_ для использования" или "использовано так, как оно _ не должно быть использовано"? The Guy with The Hat 5 лет назад 0
22
Albin

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

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

Я только что проверил это. В моем случае это действительно так. myMethod 5 лет назад 1
Есть ли где-нибудь документация этого формата, на которую вы могли бы сослаться? David Z 5 лет назад 1
Не уверен, я просто помню это на практике. Albin 5 лет назад 1
Похоже, вы говорите о символической ссылке в специальном каталоге, например `/ proc` или` / dev`. Можете ли вы объяснить, для чего используется эта символическая ссылка? Barmar 5 лет назад 2
@ Barmar Я ссылаюсь на обозначения в целом, я не говорю о конкретной символической ссылке в определенном каталоге Albin 5 лет назад 0
Это первый раз, когда я вообще видел эту запись, поэтому я удивлен, когда вы говорите, что это общая запись. Где вы видели, что раньше означало идентификатор процесса? Barmar 5 лет назад 4
@ Barmar Я понятия не имею, насколько «на самом деле» это обозначение, является ли оно специфическим для дистрибутива или что-то в этом роде. Когда я посмотрел его довольно давно, единственные ресурсы, которые я нашел, ссылались на число после + к идентификатору процесса, что также было решением в моем случае. В своем первом комментарии myMethod сказал, что он применим и в его случае использования. Albin 5 лет назад 0
Я никогда раньше не видел эту запись, похоже, она может быть специфической для конкретного приложения. Вы помните, где вы видели это раньше? Barmar 5 лет назад 0
@ Бармар нет, я просто помню, что мне понадобилось время, чтобы найти ответ. Просто посмотрите на нотацию «IP: +» после проб и ошибок, и вы найдете несколько примеров (большинство результатов покажут вам нотацию IP: PORT, но это было не так, поэтому я все еще помню - и потому что это было проблема на основе Linux, с которой я не часто сталкиваюсь) Albin 5 лет назад 0