The XDG Base Directory Specification is a very interesting spec for user directories. It also provides good default values, except for XDG_RUNTIME_DIR
.
Now I am writing a software that needs to create named pipes. It is a per-user client-server framework (there is a FIFO for the server and a FIFO per client).
If XDG_RUNTIME_DIR
is not defined, I am currently using a per-user subdirectory in /tmp
— but it does not ensure all the specified conditions (viz. the paragraph starting with "The lifetime of the directory MUST be bound to the user being logged in…")
Is /tmp/myserver-$USER
good enough?
Edit
I saw elsewhere a few suggestions:
.
is quite unsatisfactory (at least because it is not an absolute path).- I also saw
/var/run/user/$USER
— not bad, but that directory does not exist (at least on my box running a Debian testing)
SystemD makes
/run/user/$USER
kinda mandatory.http://www.freedesktop.org/software/systemd/man/file-hierarchy.html
/tmp
is used by plenty of programs in a similar way already. On my system I can see the/tmp/orbit-$USER
(used by Gnome's ORBit2) and/tmp/.X11-unix/
(Xorg and X11) directories with plenty of pipes, ehm, sockets, in them. I am sure there are also others, so I see nothing wrong with what you are doing. Just be prepared that since it is a world writeable location a malicious process can hijack the location (verify the permissions before you write to it).I can also recommend
$TMPDIR
for those who use pam_mktemp, as this directory is only accessible by the user.Create directory /tmp/service-$USER.id with unique id. For exsmple, in shell: