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

标签 c linux

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

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

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

有更好的方法吗?

最佳答案

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

<小时/>

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

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

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

或者,要获取进程中的主要可执行路径,您可以阅读 /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 的一种方法。但我从来没有考虑过,并且可能存在该目录由“错误”用户拥有的情况。

关于c - 当由 root 运行时,如何在与可执行文件相同的目录中创建文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55692572/

相关文章:

c - gcc 和警告中的希腊字符

c - 在C中查找 "double free or corruption (out):"的原因

C) fprintf() 文件指针溢出

当我在 CLion 2020.3 上使用远程工具链时,cmake 无法解析本地路径

c - 如何在 C 中将整数转换为字符?

C execve() 参数 [生成一个 shell 示例]

linux - 你能在 grep 中保留不匹配内容的格式吗?

c - 如何使用纯C读取excel文件?

linux - FreeBSD Linux 库安装

c - 如何查找 pthread 是否有挂起的取消请求