auf festplatte zugreifen



  • Hey Leute,

    weiß einer von euch wie ich mit Hilfe von C unter Linux direkt auf die einzelnen Sektoren der Festplatte zugreifen kann?

    Gruß 🙂



  • Oeffne das entsprechende file der Festplatte ? ... /dev/sda


  • Mod

    knivil schrieb:

    Oeffne das entsprechende file der Festplatte ? ... /dev/sda

    Das ist aber schon eine Abstraktion des Festplatteninhalts. Ich wüsste nicht, wie ein Programm unter Linux direkten Zugriff auf die Festplattenhardware erlangen könnte. Da müsste man schon ein eigenes Kernelmodul für schreiben, dass einem das erlaubt. Wozu soll das überhaupt gut sein?



  • SeppJ schrieb:

    knivil schrieb:

    Oeffne das entsprechende file der Festplatte ? ... /dev/sda

    Das ist aber schon eine Abstraktion des Festplatteninhalts. Ich wüsste nicht, wie ein Programm unter Linux direkten Zugriff auf die Festplattenhardware erlangen könnte. Da müsste man schon ein eigenes Kernelmodul für schreiben, dass einem das erlaubt. Wozu soll das überhaupt gut sein?

    eigentlich nicht oder? ein sektor hat doch eine feste größe (blockdevice) und es gibt doch sicher ein file über das man auf alle zugreifen kann, natürlich bietet ein treiber die möglichkeit auf die festplatte lesend und schreibend zuzugreifen, ohne ein vorgeschaltetes file system... 😕



  • noobLolo schrieb:

    SeppJ schrieb:

    knivil schrieb:

    Oeffne das entsprechende file der Festplatte ? ... /dev/sda

    Das ist aber schon eine Abstraktion des Festplatteninhalts. Ich wüsste nicht, wie ein Programm unter Linux direkten Zugriff auf die Festplattenhardware erlangen könnte. Da müsste man schon ein eigenes Kernelmodul für schreiben, dass einem das erlaubt. Wozu soll das überhaupt gut sein?

    eigentlich nicht oder? ein sektor hat doch eine feste größe (blockdevice) und es gibt doch sicher ein file über das man auf alle zugreifen kann, natürlich bietet ein treiber die möglichkeit auf die festplatte lesend und schreibend zuzugreifen, ohne ein vorgeschaltetes file system... 😕

    Und damit dann Zugriffsrechte etc. umgehen? Das wird dir das OS sicher verbieten wollen.


  • Mod

    Blue-Tiger schrieb:

    noobLolo schrieb:

    SeppJ schrieb:

    knivil schrieb:

    Oeffne das entsprechende file der Festplatte ? ... /dev/sda

    Das ist aber schon eine Abstraktion des Festplatteninhalts. Ich wüsste nicht, wie ein Programm unter Linux direkten Zugriff auf die Festplattenhardware erlangen könnte. Da müsste man schon ein eigenes Kernelmodul für schreiben, dass einem das erlaubt. Wozu soll das überhaupt gut sein?

    eigentlich nicht oder? ein sektor hat doch eine feste größe (blockdevice) und es gibt doch sicher ein file über das man auf alle zugreifen kann, natürlich bietet ein treiber die möglichkeit auf die festplatte lesend und schreibend zuzugreifen, ohne ein vorgeschaltetes file system... 😕

    Und damit dann Zugriffsrechte etc. umgehen? Das wird dir das OS sicher verbieten wollen.

    Root darf das.



  • Hey vielen dank schoneinmal für die antworten 🙂

    Wie finde ich überhaupt heraus, welche schnittstelle mein Festplattentreiber hat und muss jeder Festplattentreiber (oder allgemein Treiber für die Standard Ein- und Ausgabe) ein bestimmtes Standard-Interface implementieren?

    Gruß 🙂


  • Mod

    MatheStein schrieb:

    Hey vielen dank schoneinmal für die antworten 🙂

    Wie finde ich überhaupt heraus, welche schnittstelle mein Festplattentreiber hat und muss jeder Festplattentreiber (oder allgemein Treiber für die Standard Ein- und Ausgabe) ein bestimmtes Standard-Interface implementieren?

    Gruß 🙂

    Unix schreibt vor, dass jedes Gerät wie eine Datei zu behandeln ist. Der Gerätetreiber muss also eine Schnittstelle zwischen Gerät und Datei schaffen. Es gibt zwei Arten von Dateien die der Gerätetreiber zur Verfügung stellen darf: Block device files und character device files. Ich verwende hier die Englischen Begriffe, damit du danach googeln kannst. Block devices werden üblicherweise für Geräte mit wahlfreiem Zugriff verwendet, also auch für Festplatten. Character devices für Geräte mit sequentiellem Zugriff, zum Beispiel eine Tastatur oder Maus. Das Interface, das der Treiber implementieren muss, sieht für die beiden Typen etwas unterschiedlich aus. Details dazu findest du in Anleitungen zur Linux Treiberprogrammierung.

    Wenn man ein Gerät verwenden will, brauchen einen solche Details aber gar nicht zu interessieren. Man liest und schreibt dann einfach in die Gerätedatei und der Gerätetreiber übersetzt dann diese Zugriffe in echte Anweisungen an das Gerät. Du kannst das ja mal ausprobieren (muss man root für sein):

    cat /dev/input/mice
    

    Und dann die Maus bewegen.

    Die Dateien für die Festplatten heißen in der Regel /dev/sdx oder /dev/hdx. Das einzige was man beim Zugriff auf ein Gerät noch wissen muss, ist, ob es sich um ein block device oder ein character device handelt.



  • Vielen Dank für die Antwort!! 🙂

    Kann ich die Datei "mice" nur via C (syscall) editieren oder gibts da gewisse Standardtools für das manuelle Editieren von Gerätedatein unter beispielsweise ubuntu?

    Gruß



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum Linux/Unix verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • MatheStein schrieb:

    Vielen Dank für die Antwort!! 🙂

    Kann ich die Datei "mice" nur via C (syscall) editieren oder gibts da gewisse Standardtools für das manuelle Editieren von Gerätedatein unter beispielsweise ubuntu?

    Wenn du nicht willst, dass die C Bibliothek für die Puffert, dann nimm die Funktionen open , read , write und lseek . Das hat den Vorteil, dass du auch die Funktion ioctl verwenden kannst, die dir spezielle Funktionen zu einem Gerät zur Verfügung stellt, z.B. Festplattenmotor abschalten o. Ä.


Anmelden zum Antworten