我使用snprintf
将格式化数据写入磁盘,但我有一个问题,如何将其保存到用户的主目录?
snprintf(filename, sizeof(filename), "%s_%s.sho", client, id);
答案 0 :(得分:3)
用户控制他的环境 - 因此HOME
环境变量可能不正确,甚至可能无法设置。
使用getuid()
和getpwuid()
获取系统指定的用户主目录:
#include <unistd.h>
#include <pwd.h>
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 );
错误检查留作练习......
答案 1 :(得分:2)
使用getenv(3)
查询HOME
环境变量的值。例如,这会打印我的主目录:
#include <stdlib.h>
#include <stdio.h>
int main(void) {
printf("%s\n", getenv("HOME"));
return 0;
}
您可以将变量filename
设置为返回值,然后在那里写下您想要的任何数据。
这适用于任何类Unix系统,包括Linux,macOS,BSD等等。
答案 2 :(得分:2)
在Linux和POSIX系统上,主目录常常来自HOME
环境变量。所以你可以编码
snprintf(filename, sizeof(filename), "%s/%s_%s.sho",
getenv("HOME"), client, id);
谦虚地getenv(3)可能会失败(或错误)。但这很少发生。请参阅environ(7)。
(您可以检查,或使用getpwuid(3)与getuid(2) ...)
使用setuid可执行文件可能会变得非常复杂。您需要更准确地定义房屋的内容,并进行适当的编码(这是一个练习)。