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.
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 :Envoyé par united4life
fopen()
fwrite()
fclose()
non pas de cette maniere mais plutot quelque chose du genre comme ce
je donne a la fonction les donnees que je veux enregistrer+le secteur et elle ecrit data dans ce secteur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 void ecrire(char data[],int secteur)
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.
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).Envoyé par united4life
http://en.wikipedia.org/wiki/BIOS_call
Ce que tu veux faire est ce qu'on appelle une écriture absolue. Sous DOS :
Avec drive 0 pour A:, 1 pour B:, etc.
Code : Sélectionner tout - Visualiser dans une fenêtre à part int abswrite(int drive, int nsectors, long lsector, void *buffer);
Prototype dans dos.h
Pour faire une lecture absolue : abswrite() bien sur.
Et alors? Les fonctions absread() et abswrite elles mêmes utilisent l'interruption DOS 26h ...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
Il faudrait préciser :Envoyé par united4life
- 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.
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.Envoyé par Franck.H
Bonsoir ,
Les deux fonctions que tu proposes , ne sont pas du tout portables !Ce que tu veux faire est ce qu'on appelle une écriture absolue. Sous DOS :Melem
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.
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 .
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?
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 .
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.
Comme déjà dit ici Tournerait-on en rond ?Envoyé par Médinoc
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager