gpt4 book ai didi

linux - 确定文件系统是否以只读方式挂载的最佳 POSIX 方法

转载 作者:IT王子 更新时间:2023-10-29 00:57:12 27 4
gpt4 key购买 nike

如果我有一个 POSIX 系统,如 Linux 或 Mac OS X,确定路径是否在只读文件系统上的最佳和最便携的方法是什么?我可以想到 4 种方法:

  • open(2) 一个带有O_WRONLY 的文件 - 您需要想出一个唯一的文件名并传入 O_CREATO_EXCL。如果它失败并且您有 EROFS 的错误号,那么您就知道它是一个只读文件系统。这会产生烦人的副作用,因为实际上创建了一个您不关心的文件,但您可以在创建后立即取消链接(2)它。

  • statvfs(3) - 返回的 struct statvfs 的字段之一是 f_flag,标志之一是ST_RDONLY 用于只读文件系统。但是,statvfs(3) 的规范清楚地表明应用程序不能依赖任何包含有效信息的字段。似乎很有可能 ST_RDONLY 未设置为只读文件系统。

  • access(2) - 如果您知道挂载点,则可以使用带有 W_OK 标志的 access(2)只要您以对挂载点具有写入权限的用户身份运行。也就是说,要么你是 root,要么它是用你的 UID 作为挂载参数挂载的。您将获得 -1 的返回值和 EROFS 的错误号。

  • 解析 /etc/mtab/proc/mounts - 似乎不可移植。例如,Mac OS X 似乎两者都没有。即使系统确实有 /etc/mtab 我也不确定操作系统之间的字段是否一致,或者只读的挂载选项(ro 在 Linux 上)是否是便携。

我还缺少其他方法吗?如果您需要知道文件系统是否以只读方式挂载,您会怎么做?

最佳答案

您还可以popen 命令mount 并检查输出以查找您的文件系统并查看它是否包含文本"(ro,".

但同样,这不一定是可移植的。

我的选择是完全不担心文件系统是否以只读方式挂载。只需尝试创建您的文件,如果失败,请告诉用户错误是什么。当然,让他们可以选择将其保存在其他地方。

无论如何,您确实必须做那种事情,因为在任何情况下,测试和实际操作之间甚至存在很小的差距,您可能会发现情况发生了变化(可能不会达到使整个文件系统只读的程度,但,谁知道呢,也许有(或将来会有)允许这样做的文件系统。

关于linux - 确定文件系统是否以只读方式挂载的最佳 POSIX 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4894743/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com