Bonjour à tous,
Dans le cadre de mon cours de Système d'exploitation, je dois réaliser une programme capable d'afficher les partitions présentes sur le disque principal.
Pour ce faire, je vais lire les quatre entrées des partitions principales (qui se trouvent juste après le MBR). Je dois ensuite, si je détecte une partition étendue (ce qui est le cas), aller analyser les entrées des partitions logiques.
D'un point de vue technique, j'ouvre le "fichier" /dev/sda en lecture et le traite comme si c'était un bête fichier sur le disque. Jusque là pas de problème, j'arrive à afficher correctement les quatre entrées des partitions principales mais le problème arrive juste après. J'ai la partition étendue qui commence au 10 000 000ème secteurs, ce qui m'amène au 5 120 000 000ème octets. Ce nombre énorme ne rentre pas dans un simple "unsigned int/unsigned long", qui est utilisé pour dans la fonction "lseek()" pour me déplacer dans mon fichier. Le véritable paramètre de "lseek()" est un "off_t" qui, si je regarde le code de "stdio.h" est un "long" ou un "long long" selon la taille de l'entrée prévue dans la table des descripteurs de fichiers ouverts :
104 #if defined(_LP64) || _FILE_OFFSET_BITS == 32
105 typedef long off_t; <typedef:off_t>
106 #else
107 typedef __longlong_t off_t;
De ce côté là, un "long long" m'aurait grandement plu mais apparemment sur le système 32 bits que j'utilise au laboratoire, ce n'est pas ce cas là.
J'ai bien trouvé l'appel système "llseek" (man) mais les résultats sont erratiques. Vous allez me dire que c'est normal avec une entrée de 32bits dans la table des fichiers ouverts mais quand même
Je procède au téléchargement d'une distribution 64bits en espérant que cela fonctionnement (logiquement) mais je ne comprends pas comment fdisk, tournant sur le système 32bits, arrive lui à lire plus loin que 4Go...il doit y avoir une manière de le faire et j'espère que quelqu'un de ce forum connaisse la réponseJ'ai pourtant essayé de regarder le code source de fdisk mais je m'y perds très vite.
Merci de votre aide !
Partager