我有一个 Raspberry Pi 3,在其上使用 Visual Studio 跨平台构建来构建应用程序 (.out) 文件。 (.out) 文件具有所有人的权限。当我运行这个(.out)时,它会在 Pi 上创建一个文件夹来保存一些带有一些输出数据的文本文件。但是,当我尝试打开文件夹来访问数据时,出现错误“打开时出错...权限被拒绝”。由于某种原因,输出文件夹的权限为“仅限所有者”。每次更改权限都必须使用“chmod”,很不方便。奇怪的是,我有其他 Pi 单元具有相同的“.out”,但文件是可访问的,并且没有权限问题。我尝试在此特定设备上安装新的操作系统映像,但出现同样的问题。有什么想法吗?
编辑:这是我用来创建输出文件夹的代码
if (mkdir(outputdir_time_tagged, 0700) == 0)
printf("[INFO_] Output directory created successfully\n");
答案1
除非您在程序中专门设置权限,否则将使用 UMASK。
您可以在 中全局设置 UMASK /etc/pam.d/common-session
。您可以为当前会话设置 UMASK
umask 007
甚至对于特定命令:
(umask 002 && a.out)
答案2
我发现可以更改命令中的权限来解决该问题。我使用的0700权限仅适用于“所有者”。在我正在开发的 Raspberry Pi 上,“root”是所有者,而不是我的用户帐户。将权限更改为 777 可确保设置“任何人”权限。由于正如 Ljm Dullaart 在他的回答中提到的那样,“mkdir”受到“umask”的影响,因此我添加了“chmod”以确保无论“umask”值如何,都应用所需的 777 权限。
if (mkdir(outputdir_time_tagged, 0777) == 0)
chmod(outputdir_time_tagged, 0777);
printf("[INFO_] Output directory created successfully\n");