C snprintf 指定用户主目录
C snprintf specify user home directory
我使用snprintf
将格式化的数据写入磁盘,但是我有一个问题,如何将它保存到用户的主目录?
snprintf(filename, sizeof(filename), "%s_%s.sho", client, id);
使用getenv(3)
查询HOME
环境变量的值。例如,这将打印我的主目录:
#include <stdlib.h>
#include <stdio.h>
int main(void) {
printf("%s\n", getenv("HOME"));
return 0;
}
您可以将变量 filename
设置为 return 值,然后在其中写入您想要的任何数据。
这应该适用于任何类 Unix 系统,包括 Linux、macOS、BSD 等等。
在 Linux 和 POSIX 系统上,主目录 通常 来自 HOME
环境变量。所以你可能会编码
snprintf(filename, sizeof(filename), "%s/%s_%s.sho",
getenv("HOME"), client, id);
迂腐地getenv(3) could fail (or be wrong). But that rarely happens. See environ(7)。
(您可以检查,或者使用 getpwuid(3) with getuid(2)...)
使用 setuid 可执行文件,事情可能会变得非常复杂。您需要更准确地定义房屋是什么,并适当地编写代码(留作练习)。
用户控制着他的环境 - 所以 HOME
环境变量可能不正确,甚至可能没有设置。
使用getuid()
and 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 );
错误检查留作练习...
我使用snprintf
将格式化的数据写入磁盘,但是我有一个问题,如何将它保存到用户的主目录?
snprintf(filename, sizeof(filename), "%s_%s.sho", client, id);
使用getenv(3)
查询HOME
环境变量的值。例如,这将打印我的主目录:
#include <stdlib.h>
#include <stdio.h>
int main(void) {
printf("%s\n", getenv("HOME"));
return 0;
}
您可以将变量 filename
设置为 return 值,然后在其中写入您想要的任何数据。
这应该适用于任何类 Unix 系统,包括 Linux、macOS、BSD 等等。
在 Linux 和 POSIX 系统上,主目录 通常 来自 HOME
环境变量。所以你可能会编码
snprintf(filename, sizeof(filename), "%s/%s_%s.sho",
getenv("HOME"), client, id);
迂腐地getenv(3) could fail (or be wrong). But that rarely happens. See environ(7)。
(您可以检查,或者使用 getpwuid(3) with getuid(2)...)
使用 setuid 可执行文件,事情可能会变得非常复杂。您需要更准确地定义房屋是什么,并适当地编写代码(留作练习)。
用户控制着他的环境 - 所以 HOME
环境变量可能不正确,甚至可能没有设置。
使用getuid()
and 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 );
错误检查留作练习...