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

时间:2019-04-15 15:30:22

标签: c linux

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

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

我对linux中的用户管理了解不足,因此,我想解决的唯一方法是通过修改argv [0]获得可执行文件的路径。

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

程序是否必须以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] = '\0';
    char *directory = dirname(path);
}

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