IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Système de Gestion de Fichier


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 195
    Points : 62
    Points
    62
    Par défaut Système de Gestion de Fichier
    Salut tout le monde,
    Dans un cours de Systèmes d'exploition je dois réaliser un petit programme similaire au SGF (Création d'un fichier, ouverture d'un fichier, ajout d'un enregistrement dans un fichier...) en se basant sur la création de certaines tables (comme le catalogue général, le catalogue privé, la table d'occupation des secteurs, les cartes d'implantation).
    Le prof nous a laissé le choix libre du langage avec lequel on doit réaliser ce mini-projet et comme le langage C est connu par sa relation "intime" avec la machine me voici entrain de poster ce message sur ce forum.
    Pour commencer j'ai besoin de connaitre les fonctions du C qui permettent la manipulation des secteurs sur une disquette ou clé USB (pour ne pas risquer d'abimer le Disque Dur), alors si vous avez un lien ou une liste de fonctions à me proposer je vous remercie d'avance.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Points : 160
    Points
    160
    Par défaut
    J'ai pas trop compris le sujet, mais pour obtenir des informations sur un disque tu peux utiliser statfs http://www.gsp.com/cgi-bin/man.cgi?s...2&topic=statfs

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 544
    Points
    41 544
    Par défaut
    Dois-tu vraiment taper sur un système de fichiers existant?
    La plupart du temps, les projets de Système de ce genre consistent en la réalisation d'un système de fichiers virtuel (typiquement, stocké dans un seul grand fichier).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 195
    Points : 62
    Points
    62
    Par défaut
    Merci pour vos réponses. je ne pense pas que je suis obligé de taper sur un système de fichiers existant, l'idée est de créer ce programme afin de manipuler les secteurs d'un support de stockage mais si vous avez une bonne idée à me proposer ça sera le bienvenue.
    Ce dont j'ai besoin comme point de depart est la liste des fonctions prédéfinies en C qui permettent une telle manipulation.

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 544
    Points
    41 544
    Par défaut
    Il n'existe pas en C standard de fonctions prédéfinies permettant de manipuler les secteurs: Le niveau le plus "proche" du disque est celui de fopen().

    Ensuite, il y a peut-être mieux du côté de POSIX ou de l'API Windows.

    Mon conseil, c'est de bosser (si possible) entièrement sur un système virtuel: Tu te fais un grand fichier binaire de quelques centaines de Mo, et en guise de "secteurs", tu utilises les Ko individuels du grand fichier.

    Ainsi, l'écriture sur un secteur donné correspondra à un fseek() et un fwrite() sur ton grand fichier...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 195
    Points : 62
    Points
    62
    Par défaut
    Mon conseil, c'est de bosser (si possible) entièrement sur un système virtuel: Tu te fais un grand fichier binaire de quelques centaines de Mo, et en guise de "secteurs", tu utilises les Ko individuels du grand fichier.
    Comment créer un fichier avec une taille de notre choix et qui ne contient rien à l'avance? et comment assimiler les Ko de ce fichier aux secteurs?

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 544
    Points
    41 544
    Par défaut
    Citation Envoyé par dark_geek Voir le message
    Comment créer un fichier avec une taille de notre choix et qui ne contient rien à l'avance?
    Il ne contiendra pas "rien": Au minimum, il ne contiendra que des zéros.
    et comment assimiler les Ko de ce fichier aux secteurs?
    C'est ton format de fichier, c'est toi qui décides.

    Traditionnellement, un secteur fait 512 octets, soit un demi KO.

    Ensuite, tu décides quoi mettre à quel endroit de ton fichier "disque virtuel": Tels secteurs pour la FAT, tels secteurs pour les données, puis tu y fais ta structure...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 195
    Points : 62
    Points
    62
    Par défaut
    je commence à imaginer le mécanisme du programme, mais remplir le fichier au début avec des zéros ne veut pas dire que les informations que je dois inscrire dans ce fichier par la suite doivent être en binaire n'est ce pas?
    Il y'a aussi un autre point, comment dire au programme que chaque 512Ko forment un secteur?
    merci encore pour tes réponses.

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 544
    Points
    41 544
    Par défaut
    Citation Envoyé par dark_geek Voir le message
    je commence à imaginer le mécanisme du programme, mais remplir le fichier au début avec des zéros ne veut pas dire que les informations que je dois inscrire dans ce fichier par la suite doivent être en binaire n'est ce pas?
    Fais gaffe à ce que tu appelles "en binaire". Un fichier binaire, c'est des données brutes, une suite d'octets.
    Il y'a aussi un autre point, comment dire au programme que chaque 512Ko forment un secteur?
    Ça, c'est toi qui le codes quand tu crées le programme.
    Ça peut être un simple #define TAILLE_SECTEUR 512 dans ton code, et tu utilises TAILLE_SECTEUR partout ensuite dans le code...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 947
    Points : 1 351
    Points
    1 351
    Par défaut
    Salut,

    Citation Envoyé par dark_geek Voir le message
    Comment créer un fichier avec une taille de notre choix et qui ne contient rien à l'avance? et comment assimiler les Ko de ce fichier aux secteurs?
    Tu as un début de réponse ici : http://www.developpez.net/forums/m3754657-1/

    A+

    Pfeuh

  11. #11
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 195
    Points : 62
    Points
    62
    Par défaut
    je voudrais savoir s'il y'a une bibliohèque qui fournit des fonctions qui permettent la manipulation directe des secteurs puisque le prof a demandé de travailler sur une disquette mais je vais essayer d'exploiter vos suggestions..merci pour vos réponses!

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 26
    Points : 22
    Points
    22
    Par défaut
    bonjour

    Je voudrais essayer de créer un système de fichiers très basic. Pour cela l'idée d'un fichier binaire m'a paru bonne.

    En cherchant j'ai appris que l'on ne peut faire que des manipulations par octets en c (pas bit à bit).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <fcntl.h>
    #include <sys\stat.h>
     
    int main(){
    	int fd = open("essai",O_CREAT, S_IWRITE);
     
    	int i;
    	char *temp="0";
     
    	for(i=0;i<1024;i++){
    	    write( fd, temp, 1);
    	}
    	return EXIT_SUCCESS;
    }
    Je pensais que ce code me permettrait de créer un fichier binaire de 1 Ko, mais le fichier, qui est bien créé ne semble pas être remplit (taille nulle). Quelqu'un pourrait m'éclairer ??

    Autre question :
    Est-il possible de savoir comment être en correspondance avec les blocs physique d'un périphérique ? par exemple en faisant en buffer de 512 octets comment être sûr que la lecture ne se fera pas à chaque fois à cheval sur deux blocs? (je ne sais pas si je suis très clair)

    Merci

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 544
    Points
    41 544
    Par défaut
    Je pense que tu dois mettre O_WRONLY en plus de O_CREAT.

    De plus, je rappelle que ces fonctions ne sont pas standard C: Il s'agit d'ersatz des fonctions POSIX de gestion de fichier.
    Je recommande d'utiliser fopen() en mode binaire et fwrite() à la place.
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void) {
    	FILE* pf = fopen("essai", "wb");
     	if(pf != NULL) {
    		int i;
    		char temp = '0';
     
    		for(i=0 ; i<1024 ; i++) {
    			fwrite( &temp, sizeof temp, 1, pf);
    		}
    		fclose(pf);
    	}
    	return EXIT_SUCCESS;
    }
    PS: Veux-tu vraiment écrire des caractères '0' ?
    Ne veux-tu pas plutôt écrire des octets nuls?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 26
    Points : 22
    Points
    22
    Par défaut
    effectivement le problème venait des paramètres d'ouverture. Merci.
    Je vais utiliser les fonctions pour les FILE * puisque cela a l'air d'être plus portable.

    C'était juste un essai les '0', j'aurais effectivement besoin de mettre des octets nuls, je souhaite y mettre une structure du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        struct bloc {
            int stat;//libre ou ovvupé
            int etat;//modifié ou non
            struct bloc *suiv;
            char esp[512-2*sizeof(int)-sizeof(struct bloc*)];
        };
    en initialisant le tableau à 0.

    sachant que je voudrais faire des bloc de x octets, je suis conscient qu'imposer le 512 peut donner des blocs de plus d'octets dus à l'alignement, mais je ne sais pas faire autrement.

    Et est-ce que quelqu'un a une idée pour la correspondance avec les blocs physiques ?

    Merci

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 544
    Points
    41 544
    Par défaut
    Je pense que tu ne dois pas stocker l'état des blocs dans les blocs eux-mêmes.
    Réserve les blocs aux données brutes, et gère l'état de tes blocs autrement, de manière centralisée.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 26
    Points : 22
    Points
    22
    Par défaut
    dac pour réserver une partie initiale du fichier pour gérer le reste de la structure.

Discussions similaires

  1. Système de gestion de transfert de fichiers
    Par lennelei dans le forum Autres Solutions d'entreprise
    Réponses: 1
    Dernier message: 26/03/2012, 10h42
  2. Windows 8 : un nouveau système de gestion de fichiers
    Par FirePrawn dans le forum Windows
    Réponses: 16
    Dernier message: 25/08/2011, 11h15
  3. Windows 8 : un nouveau système de gestion de fichiers
    Par FirePrawn dans le forum Actualités
    Réponses: 3
    Dernier message: 24/08/2011, 15h53
  4. [Système] gestion des fichiers et base de données
    Par noobspower dans le forum Langage
    Réponses: 3
    Dernier message: 26/02/2007, 10h42
  5. Système de gestion de fichier
    Par xtremax3 dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 02/11/2005, 02h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo