开源改变世界

/tmp/.tool.mmap 是一个“临时”永久文件 #1267

推推 grbl 3年前 (2023-01-30) 220次浏览
关闭
satiowadahc 打开了这个问题 2021 年 9 月 13 日 · 7条评论
关闭

/tmp/.tool.mmap 是一个“临时”永久文件#1267

satiowadahc 打开了这个问题 2021 年 9 月 13 日 · 7条评论

注释

/tmp/.tool.mmap 是一个“临时”永久文件 #1267
贡献者

一家工厂有多个用户帐户,因为每个操作员都对他们希望桌面/环境的外观有一些强烈的看法。这导致了一个有趣的问题,我们得到一个错误tool_mmap_creator() lseek fail并且 iocontrol 会崩溃,但其他一切都会运行“正常”。

要重现,请在计算机上拥有两个帐户。用户 A 登录并运行 linuxcnc,正确关闭它。用户 B 登录并运行 linuxcnc,并收到错误。如果 B 删除了 tmp 文件,他们可以正常运行 linuxcnc。

问题来自使用 600 权限创建的 /tmp/.tool.mmap。所以我从逻辑上认为我只是将 src/emc/tooldata/tooldata_mmap.cc 中的定义更改为#define TOOL_MMAP_MODE 0666. 这导致使用 0660 创建文件(我仍然有点困惑并且肯定遗漏了一些东西)。

我的下一个想法是将 O_CREATE 标志切换为需要删除名称的 O_TMPFILE。或者在关机时删除文件。

寻找关于此的任何其他建议。

操作系统:Ubuntu 20.04、Mint 20.04、Kubuntu 20.04
内核:4.19.199(不同 RT)
最新最好的主分支。

/tmp/.tool.mmap 是一个“临时”永久文件 #1267

恕我直言,在关机时删除 /tmp/ 文件应该是正确的。

/tmp/.tool.mmap 是一个“临时”永久文件 #1267
贡献者作者

我同意你的看法,但是这个评论让它看起来非常有意,它没有在关机时被删除。

void tool_mmap_close()
{
    if (!tool_mmap_base) { return; }
    // mapped file is not deleted
    // flush mmapped file to filesystem
    if (msync(tool_mmap_base, TOOL_MMAP_SIZE, MS_SYNC) == -1) {
        perror("tool_mmap_close(): msync fail");
    }
    if (munmap(tool_mmap_base, TOOL_MMAP_SIZE) < 0) {
        close(creator_fd);
        perror("tool_mmap_close(): munmapfail");
        exit(EXIT_FAILURE);
    }
    close(creator_fd);
} //tool_mmap_close()