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

问题描述 投票:-2回答:1

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

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

我对linux中的用户管理知之甚少,所以解决这个问题的唯一方法就是通过修改argv [0]来获取可执行文件的路径。

有没有更好的办法?

c linux
1个回答
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的方法,但不是我曾考虑过的东西,并且可能存在该目录由“错误”用户拥有的情况。

© www.soinside.com 2019 - 2024. All rights reserved.