注释
恕我直言,在关机时删除 /tmp/ 文件应该是正确的。 |
贡献者作者
我同意你的看法,但是这个评论让它看起来非常有意,它没有在关机时被删除。 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()
|
一家工厂有多个用户帐户,因为每个操作员都对他们希望桌面/环境的外观有一些强烈的看法。这导致了一个有趣的问题,我们得到一个错误
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)
最新最好的主分支。