C snprintf指定用户主目录
我使用snprintf
将格式化数据写入磁盘,但我有一个问题,如何将其保存到用户的主目录?
snprintf(filename, sizeof(filename), "%s_%s.sho", client, id);
在Linux和POSIX系统上,主目录通常来自HOME
环境变量。 所以你可能会编码
snprintf(filename, sizeof(filename), "%s/%s_%s.sho", getenv("HOME"), client, id);
小心翼翼地, getenv(3)可能会失败(或错误)。 但这很少发生。 见环境(7) 。
(您可以使用getuid(2)检查,或使用getpwuid(3 ) …)
使用setuid可执行文件,事情可能变得有趣复杂。 您需要更准确地定义房屋的内容和适当的代码(这是一个练习)。
用户控制他的环境 – 因此HOME
环境变量可能不正确或甚至可能无法设置。
使用getuid()
和getpwuid()
来获取系统指定的用户主目录:
#include #include struct passwd *pwd = getpwuid( getuid() ); /* need to duplicate the string - we don't know what pw_dir points to */ const char *homeDir = strdup( pwd->pw_dir );
错误检查留作练习……
使用getenv(3)
查询HOME
环境变量的值。 例如,这会打印我的主目录:
#include #include int main(void) { printf("%s\n", getenv("HOME")); return 0; }
您可以将变量filename
设置为返回值,然后在那里写入您想要的任何数据。
这适用于任何类Unix系统,包括Linux,macOS,BSD等等。