Search code examples
cfileprintfhome-directory

C snprintf specify user home directory


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);

Solution

  • 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).