C语言 当由 root 运行时,如何在与可执行文件相同的目录中创建文件



我有一个用C编写的程序,可以创建和读取配置文件。它假定配置文件与它位于同一目录中。

该程序由 fcron 以 root 身份运行。如果 root 运行此程序,则在 root 的主目录中创建配置文件。它需要在程序所在的用户目录中创建。

我对 linux 中的用户管理了解不够,无法解决这个问题,所以我能想到解决这个问题的唯一方法是通过修改 argv[0] 来获取可执行文件的路径。

有没有更好的方法?

程序必须以 root 身份运行吗?为用户使用 crontab 将确保正确的主目录、文件权限等以及安全优势。


您可以修改作业以在所需的工作目录中运行。我相信语法是这样的:

15 7 * * * cd /home/myuser/ && /usr/bin/myprogram

或者将其作为参数传递,(有关--config-path=~/mycustomconfig之类的示例,请参阅各种程序(。这些具有更大的灵活性,例如,如果为多个用户安装一次程序。

或者,要获取进程中的主可执行路径,您可以读取/proc/self/exe,然后您可以使用dirname从完整路径获取目录。

char path[MAX_PATH];
ssize_t len = readlink("/proc/self/exe", path, MAX_PATH);
if (len > 0 && len < MAX_PATH) {
    path[len] = '';
    char *directory = dirname(path);
}

在任何一种情况下,常规文件 I/O 函数都将创建一个由 root 拥有和可写的文件,如果不需要,可以使用chown(path, owner, group)。 主目录上的stat(path, buf)可能是获取chown ID的一种方式,但不是我曾经考虑过的事情,并且可能存在目录由"错误"用户拥有的情况。

最新更新