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 :

ecrire et lire sur disque dur


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Points : 6
    Points
    6
    Par défaut ecrire et lire sur disque dur
    je voudrais savoir s'il est possible d'ecrire sur un disque dur ou disquette grace a
    un programme en C si c'est oui comment le faire et grace a qu'elle fonction.
    MERCI.

  2. #2
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par united4life
    je voudrais savoir s'il est possible d'ecrire sur un disque dur ou disquette grace a
    un programme en C si c'est oui comment le faire et grace a qu'elle fonction.
    MERCI.
    Oui c'est possible :

    fopen()
    fwrite()
    fclose()

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    non pas de cette maniere mais plutot quelque chose du genre comme ce
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void ecrire(char data[],int secteur)
    je donne a la fonction les donnees que je veux enregistrer+le secteur et elle ecrit data dans ce secteur.

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Il me semble que dans ton cas il te faut un accès bas niveau au périphérique ce que les systèmes évolués comme Windows, Linux (et autres unixoïdes), etc... ne te permettent pas d'avoir car il faut tout de même un minimum de protection et ceci est plutôt géré par le système sous-jacent.

    Je peut bien sûr me tromper mais bon, c'est mon avis d'après mon expérience.

  5. #5
    Futur Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    c'est possible de la realiser en assembleur et c'est ce que j'ai fait mais malheuresement c'est en assembleur et pas en C je voudrais pas utiliser les fopen et companie.

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par united4life
    c'est possible de la realiser en assembleur et c'est ce que j'ai fait mais malheuresement c'est en assembleur et pas en C je voudrais pas utiliser les fopen et companie.
    Tu peux faire ça en mode réel sur un PC avec les fonctions du BIOS (INT 13h).

    http://en.wikipedia.org/wiki/BIOS_call

  7. #7
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut Re:
    Ce que tu veux faire est ce qu'on appelle une écriture absolue. Sous DOS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int abswrite(int drive, int nsectors, long lsector, void *buffer);
    Avec drive 0 pour A:, 1 pour B:, etc.
    Prototype dans dos.h
    Pour faire une lecture absolue : abswrite() bien sur.

    c'est possible de la realiser en assembleur et c'est ce que j'ai fait mais malheuresement c'est en assembleur et pas en C
    Et alors? Les fonctions absread() et abswrite elles mêmes utilisent l'interruption DOS 26h ...

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par united4life
    je voudrais savoir s'il est possible d'ecrire sur un disque dur ou disquette
    Il faudrait préciser :
    • le système sur lequel cela doit fonctionner ;
    • si tu veux écrire sur un disque physique (ex. : le disque maître du premier contrôleur IDE) ou sur un volume logique (ex. : le volume "C:" sous Windows ou la partition N de tel disque sous Linux).

    Par exemple, sous Windows tu peux utiliser CreateFile() pour ouvrir "\\.\PhysicalDrive0" (pour un disque physique) ou "\\.\C:" (pour un disque logique).
    Sous linux, tu peux ouvrir le périphérique associé à ce que tu veux ("/dev/hda" pour le disque maître du premier contrôleur IDE, "/dev/hda1" pour la première partition sur ce disque, etc).
    Evidemment, il faut être administrateur dans les deux cas.
    Sous Windows 9x, c'est un poil plus compliqué : il faut passer par le périphérique "\\.\vwin32" pour appeler des fonctions du BIOS.
    Sous DOS, il suffit de passer par le BIOS.
    Citation Envoyé par Franck.H
    Il me semble que dans ton cas il te faut un accès bas niveau au périphérique ce que les systèmes évolués comme Windows, Linux (et autres unixoïdes), etc... ne te permettent pas d'avoir car il faut tout de même un minimum de protection et ceci est plutôt géré par le système sous-jacent. [...]
    Oui et non. Certes, avoir un "accès bas niveau au périphérique" n'est théoriquement pas permis par les systèmes comme Windows et Linux mais il n'est pas nécessaire d'avoir un "accès bas niveau au périphérique" pour écrire "directement" sur un disque puisque ces mêmes systèmes fournissent un mécanisme d'abstraction qui permet d'accéder à ces périphériques (à peu près) comme on accèderait à des fichiers.

  9. #9
    Membre régulier Avatar de Dev-FX
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 94
    Points : 93
    Points
    93
    Par défaut
    Bonsoir ,

    Melem
    Ce que tu veux faire est ce qu'on appelle une écriture absolue. Sous DOS :
    Code :

    int abswrite(int drive, int nsectors, long lsector, void *buffer);

    Avec drive 0 pour A:, 1 pour B:, etc.
    Prototype dans dos.h
    Pour faire une lecture absolue : abswrite() bien sur.
    Les deux fonctions que tu proposes , ne sont pas du tout portables !
    Le must , c'est une fonction qui marche sous Windows et Linux .
    Il existe d'autres fonctions (par exemples dans bios.h) , mais le probleme de portabilité persiste .
    Utiliser les interruptions 25h et 26h n'est pas evidant sous Windows .
    C'est rare qu'il vous repond favorablement si tu veux modifier la valeur de DS.
    Sous Linux, la syntaxe de l'assembleur AT&T est compliqué !
    Merci .

  10. #10
    Futur Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Oui c'est cette fct que je recherchais mais malheuresement elle n'est pas compatible avec dev-c++ en plus quand je l'utilise avec turbo-c++ sa marche mais apres au lieu que le prg reviennet au source il sort completement de l'ide et revient a windows.Quelqu'un sait pourquoi?

  11. #11
    Membre régulier Avatar de Dev-FX
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 94
    Points : 93
    Points
    93
    Par défaut
    Salut ,

    C'est très simple , le monsieur Windows n'aime pas qu'on se passe de son autorité , et du coup il arrête immédiatement le programme , car il tente d'accéder directement au périphérique !

    Merci .

  12. #12
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    En effet.
    Et comme l'IDE et le programme sont tous les deux des programmes DOS 16 bits (bref, c'est tout-à-fait normal qu'ils foirent sous WinNT), c'est toute la Virtual Dos Machine (VDM) qui crashe.

    Comme l'a précisé Emmanuel, tu ne peux pas avoir accès à de telles fonctions en mode protégé (ni sous Linux ni sous Windows: Sous Linux, tu dois proprement ouvrir le fichier /dev/hd* pour pouvoir écrire dedans sans chercher à utiliser directement le BIOS) :
    Tu dois être en mode réel 16 bits.

  13. #13
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par Médinoc
    [...]
    Sous Linux, tu dois proprement ouvrir le fichier /dev/hd* pour pouvoir écrire dedans
    [...]
    Comme déjà dit ici Tournerait-on en rond ?

Discussions similaires

  1. [Débutant] Ecrire sur disque dur avec int 13h
    Par bregolhen dans le forum Assembleur
    Réponses: 5
    Dernier message: 14/04/2006, 15h06
  2. Réponses: 4
    Dernier message: 18/01/2006, 09h49
  3. Le miroring Sur disque dur S-ATA
    Par ecoinfo dans le forum Composants
    Réponses: 1
    Dernier message: 25/10/2005, 10h02
  4. Données perdues sur disque dur esclave ?
    Par maadadi dans le forum Composants
    Réponses: 11
    Dernier message: 18/10/2005, 20h51
  5. [Espace perdue sur disque dur]
    Par Abdul dans le forum Windows XP
    Réponses: 19
    Dernier message: 26/06/2005, 14h50

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