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);
On Linux and POSIX systems the home directory is often from the HOME
environment variable. So you might code
snprintf(filename, sizeof(filename), "%s/%s_%s.sho",
getenv("HOME"), client, id);
Pedantically 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).