2009-10-30 2 views
2

C'est un suivi de mon autre question ici:Comment obtenir plus d'attributs vfat de fichiers sous Linux en utilisant C?

How to read vfat attributes of files in Linux using C

-

j'ai vu ce struct dans linux/msdos_fs.h:

struct msdos_dir_entry { 
    __u8 name[8],ext[3]; /* name and extension */ 
    __u8 attr; /* attribute bits */ 
    __u8 lcase; /* Case for base and extension */ 
    __u8 ctime_cs; /* Creation time, centiseconds (0-199) */ 
    __le16 ctime;  /* Creation time */ 
    __le16 cdate;  /* Creation date */ 
    __le16 adate;  /* Last access date */ 
    __le16 starthi; /* High 16 bits of cluster in FAT32 */ 
    __le16 time,date,start;/* time, date and first cluster */ 
    __le32 size; /* file size (in bytes) */ 
}; 

Ma question est , serait-il possible de peupler une telle structure dans mon application utilisateur? Mon application nécessite qu'elle puisse traverser un système de fichiers vfat et obtenir les attributs vfat (msdos_dir_entry) pour chaque répertoire/fichier trouvé.

Merci.

+0

http://www.mjmwired.net /kernel/Documentation/filesystems/vfat.txt – gcb

Répondre

4

En fait, vous pouvez obtenir presque tout cela en combinant les informations que vous pouvez obtenir de fstat(), les ioctls FAT_IOCTL_GET_ATTRIBUTES et VFAT_IOCTL_READDIR_BOTH. Cela ne va pas être agréable à regarder, car pour les deux, vous avez besoin du fichier fd et pour les deux derniers, vous avez besoin de la fd du répertoire dans lequel se trouve le fichier.

+0

Je viens aussi d'arriver à cette conclusion il y a quelques temps, vous avez raison, ça ne va pas être agréable à regarder. Mais c'est une exigence, donc j'ai peu de choix. =) Pouvez-vous fournir des exemples d'utilisation de FAT_IOCTL_GET_ATTRIBUTES et de VFAT_IOCTL_READDIR_BOTH? ephemient m'a déjà fourni un exemple dans l'autre question, mais j'apprécierai d'autres exemples (puisque je ne suis pas vraiment familier avec ioctl). Merci. – Katsupoy

+0

Si vous avez une copie de la source Linux, regardez dans/usr/src/linux/fs/fat/dir.c pour le répertoire ioctls. Il ne peuplera pas 'struct msdos_dir_entry', mais il peuplera deux' struct __fat_dirent's (un pour le nom court, un pour le nom long). – ephemient

Questions connexes