【问题标题】:How to discover that a pendrive is in read-only mode?如何发现 pendrive 处于只读模式?
【发布时间】:2012-09-11 03:37:44
【问题描述】:

我的问题如下:我有一个在嵌入式 Linux 系统中运行的 C++ 软件,该软件具有将一些数据导出到 pendrive 的功能,现在我的陷阱来了,一些用户试图在一个旧的 pendrive 中使用键在读/写和只读模式之间切换。现在,我需要知道如何检查设备是否处于只读模式,以便在我的应用程序中向用户显示一些反馈。 挂载设备前是否有系统调用检查只读状态?

【问题讨论】:

  • 试着给它写信..?通常会显示此“设备为只读”或“无法写入文件”消息(例如被发现)发生导出/写入尝试。写入可能失败还有其他原因..无论如何,我认为有更好的机会检查只读状态文件系统安装之后。
  • “安装设备之前”是什么意思?您的应用程序是否负责安装设备?为什么会这样?

标签: c++ linux system-calls


【解决方案1】:

通常的处理方法是尝试打开一个文件进行写入,然后检查是否errno == EACCES

但是,如果您必须事先检查,那就是

int on_readonly_fs(char const *path)
{
    struct statvfs fsinfo;

    while (statvfs(path, &fsinfo)) == -1)
        if (errno != EINTR)
            return -1;
    return fsinfo.f_flag & ST_RDONLY;
}

但这仅在安装设备后有效。

【讨论】:

  • 您还可以解析/proc/mounts 以获得“ro”标志。或者在较低级别,如果您知道包含文件系统的设备名称,您可以查看例如/sys/class/block/sda1/,如果设备是只读的,您将在其中找到包含“1”的ro 文件。
猜你喜欢
  • 2018-04-22
  • 1970-01-01
  • 2011-10-18
  • 2020-02-29
  • 1970-01-01
  • 2015-05-17
  • 1970-01-01
  • 2021-02-04
  • 1970-01-01
相关资源
最近更新 更多