I use snprintf
to write formatted data to disk, but I have one problem, how do I save it to the user's home directory?
snprintf(filename, sizeof(filename), "%s_%s.sho", client, id);
I use snprintf
to write formatted data to disk, but I have one problem, how do I save it to the user's home directory?
snprintf(filename, sizeof(filename), "%s_%s.sho", client, id);
Use
getenv(3)
to query the value of theHOME
environment variable. For example, this prints my home directory:You can set your variable
filename
to the return value, and then write whatever data you want there.This should work on any Unix-like system, including Linux, macOS, BSD, and probably many more.
On Linux and POSIX systems the home directory is often from the
HOME
environment variable. So you might codePedantically the getenv(3) could fail (or be wrong). But that rarely happens. See environ(7).
(You might check, and or use getpwuid(3) with getuid(2)...)
With setuid executables things could become interestingly complex. You would need to define more precisely what the home is, and code appropriately (this is left as an exercise).
The user controls his environment - so the
HOME
environment variable may not be correct or it may not even be set.Use
getuid()
andgetpwuid()
to get the user's home directory as specified by your system:Error checking is left as an exercise...