52

On my Linux filesystem, a symlink points to 127.0.1.1:+xxxxx.

Why the plus sign? Could there also be a minus? Why not just 127.0.1.1:xxxxx?

  • Is this symbolic link under /proc? – Joshua Oct 3 '18 at 22:15
  • 4
    @Joshua: More likely under ~/.mozilla/ or similar. Firefox/Thunderbird, and iirc Steam, use such symlinks for locking. – grawity Oct 4 '18 at 4:05
  • 2
    Is xxxxx a number, or the characters xxxxx? – Mawg Oct 5 '18 at 9:55
  • 2
    Probably unrelated but just for information. In some IRC clients the plus-sign before the port was there to indicate the remote server uses SSL/TLS. – eKKiM Oct 5 '18 at 14:43
95

Symbolic links which don't point to a file have no generic meaning at all. In this case it might be the process ID, or a port with some special protocol spoken over it, or another identifier. It all depends on what program made it.

Software which creates these links simply takes advantage of the facts that 1) a symlink's target may be non-existent or even total nonsense; 2) creating a symlink is a single-syscall completely atomic operation (as is reading its target), unlike creating a regular file which takes at least 3 separate system calls.

Thus symlink creation can be abused as a way of locking (ensuring single instance of a program) even when other mechanisms may be unreliable. The program doesn't need the symlink to actually resolve to a real file: it only cares about whether creating the link succeeds, or whether it fails due to it already existing.

  • 5
    "* unlike creating a regular file which takes at least 3 separate system calls.*" -- Could you clarify? Do you mean fopen, fwrite, and fclose? – Nic Hartley Oct 4 '18 at 19:21
  • 11
    @NicHartley: The system calls are open (or maybe creat in old software), write, and close, not the f* versions that stdio provides. But, yes, you need to do at least open and write to create the file and put something meaningful into it. Now if you want some code to "try to create it, if successful, put some information into it, else, read some information from it", the second process could just try its read before the first process has a chance to write. symlink avoids that; either succeed and create the link, or fail and be sure readlink has the information for you. – Guntram Blohm Oct 4 '18 at 19:50
  • "...can be abused as a way..." Is this abuse as in "used in a way it was not intended to be used" or "used in a way it should not be used"? – The Guy with The Hat Oct 26 '18 at 19:23
22

As far as I know the "+" means that the number after the IP (the "xxxxx") refers to a "process ID" (not a port which usually uses the notation [IP-address]:[portnumber]).

It is possible that this "notation" (not sure I would call it a "notation" since I don't know of any "official" documentation) refers to something else if used by a specific application - but then again, that's always the possibility not only with symlinks. The only cases I know of (and could find with a search that wasn't too extensive) the "+XXXX" always refered to the process ID.

  • 1
    I just checked it. In my case it really does. – myMethod Oct 3 '18 at 19:27
  • 1
    Is there documentation of this format somewhere that you could link to? – David Z Oct 3 '18 at 20:31
  • 1
    Not sure, I just remember it from hands on experience. – Albin Oct 3 '18 at 20:55
  • 2
    It sounds like you're talking about a symlink in a special directory, like /proc or /dev. Can you explain what this symlink is used for? – Barmar Oct 4 '18 at 1:48
  • 4
    This is the first time I've seen this notation at all, so I'm surprised to hear you say that it's a general notation. Where have you seen it used to mean a process ID? – Barmar Oct 4 '18 at 15:24

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.