2012-09-18 3 views
2

Ma question est la suivante: J'ai un logiciel en C++ fonctionnant dans un système Linux embarqué, le logiciel a une fonction pour exporter certaines données vers une clé USB, maintenant mon piège, certains utilisateurs ont essayé d'utiliser une clé USB dans une clé pour passer du mode lecture/écriture au mode lecture seule. Maintenant, j'ai besoin de savoir comment vérifier si l'appareil est en mode lecture seule pour afficher des commentaires à l'utilisateur dans mon application. Y at-il un appel système pour vérifier l'état en lecture seule avant de monter le périphérique?Comment découvrir qu'une clé USB est en mode lecture seule?

+2

Essayez d'écrire dessus ..? Normalement, ce message "périphérique en lecture seule" ou "impossible d'écrire le fichier" est affiché (par exemple découvert) * lorsque la tentative d'exportation/écriture se produit. Il y a aussi d'autres raisons pour lesquelles l'écriture pourrait échouer. Dans tous les cas, je pense qu'il y a une meilleure chance de vérifier l'état en lecture seule * après que le système de fichiers soit monté. –

+2

Que voulez-vous dire par "avant de monter l'appareil"? Votre application est-elle responsable du montage de l'appareil? Pourquoi est-ce si? –

Répondre

4

La façon habituelle de gérer cela est d'essayer d'ouvrir un fichier en écriture, puis de vérifier si errno == EACCES.

Toutefois, si vous devez vérifier au préalable, c'est

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; 
} 

Mais cela ne fonctionne que après montage du dispositif.

+1

Vous pouvez également analyser '/ proc/mounts' pour un drapeau" ro ". Ou à un niveau inférieur si vous connaissez le nom du périphérique contenant le système de fichiers que vous pouvez rechercher, par exemple. '/ sys/class/block/sda1 /' où vous trouverez un fichier 'ro' contenant un" 1 "si le périphérique est en lecture seule. –

Questions connexes