Joe*_*haw 6 unix linux filesystems posix readonly
如果我有像Linux或Mac OS X这样的POSIX系统,那么确定路径是否在只读文件系统上的最佳和最便携的方法是什么?我可以想到4个方面:
open(2)一个文件O_WRONLY- 你需要提出一个唯一的文件名,并传入O_CREAT和O_EXCL.如果它失败并且您有错误,EROFS那么您就知道它是一个只读文件系统.这会产生令人讨厌的副作用,实际上创建一个你不关心的文件,但是你可以unlink(2)在创建它之后立即创建它.
statvfs(3)- 返回的字段之一struct statvfs是f_flag,其中一个标志ST_RDONLY用于只读文件系统.但是,规范statvfs(3)明确规定应用程序不能依赖包含有效信息的任何字段.似乎ST_RDONLY可能没有为只读文件系统设置一个可能的可能性.
access(2)- 如果您知道挂载点,只要您以具有写入权限的用户身份运行,就可以使用access(2)该W_OK标志.即,您是root用户还是使用您的UID挂载作为挂载参数.你会得到一个-1的返回值和一个错误的EROFS.
解析/etc/mtab或/proc/mounts- 似乎不便携.例如,Mac OS X似乎没有这些.即使系统确实存在,/etc/mtab我也不确定操作系统之间的字段是否一致,或者只读(ro在Linux上)的挂载选项是否可移植.
我还有其他方法吗?如果你需要知道文件系统是否以只读方式挂载,你会怎么做?
您还可以使用popen该命令mount并检查输出,查找您的文件系统并查看它是否包含文本" (ro,"。
但同样,这不一定是便携式的。
我的选择是根本不担心文件系统是否以只读方式安装。只需尝试创建文件,如果失败,请告诉用户错误是什么。当然,让他们可以选择将其保存在其他地方。
无论如何,你确实必须做这类事情,因为在任何情况下,即使测试和执行之间存在很小的差距,你也可能会发现情况发生变化(可能不会达到使整个文件系统只读的程度,但是,谁知道呢? ,也许有(或将来)有一个文件系统允许这样做)。