Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Harddisks auslesen?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ]
010
08.10.2009, 20:37 Uhr
Mango



Hey. Super.

Koennste mir bitte noch die Verwendung von hd_geometry erklaeren. Komme damit nicht richtig klar.


Danke.


MFG
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
08.10.2009, 20:55 Uhr
0xdeadbeef
Gott
(Operator)


Da gibt's eigentlich nicht viel zu erklären. Der Aufruf schreibt dir halt die Plattengeometrie in ein Struct, aus dem du sie dann lesen kannst. Das struct ist in /usr/include/linux/hdreg.h definiert (wie ich schonmal erwähnte), und ziemlich selbsterklärend.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
08.10.2009, 21:56 Uhr
Mango



Ja. Habe mir den Struct angeschaut:

struct hd_geometry {
unsigned char heads;
unsigned char sectors;
unsigned short cylinders;
unsigned long start;
};


Sry, aber ich habe keine Ahnung was Heads, Sectors.. sind? Wo ist die Groe0e und das Dateisystem?


Vielen Dank, dass du versuchst mir zu helfen!

MFG
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
08.10.2009, 22:12 Uhr
0xdeadbeef
Gott
(Operator)


http://de.wikipedia.org/wiki/Festplattengeometrie
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
08.10.2009, 22:30 Uhr
Mango



Hey Danke. Habs verstanden. Jetzt nochmal zu dem Code, um die Groe0e auslzulesen.

Bei mir kommt 3075381064 raus? Habe aber nur 180 GB?

MFG
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
08.10.2009, 22:46 Uhr
0xdeadbeef
Gott
(Operator)


Das sind etwa drei Gigabyte. Hast du vielleicht eine Partition ausgelesen?

Oder, wenn du noch eine P-ATA-Festplatte hast, dann könnte das ein USB-Stick oder so was sein.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 08.10.2009 um 22:47 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
09.10.2009, 08:10 Uhr
ao

(Operator)



Zitat von Mango:
Hey Danke. Habs verstanden. Jetzt nochmal zu dem Code, um die Groe0e auslzulesen.

Bei mir kommt 3075381064 raus? Habe aber nur 180 GB?

MFG


Mit welchem Datentyp hast du gerechnet? Du musst long long nehmen. unsigned long kann keine 180 GB darstellen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
09.10.2009, 09:56 Uhr
Mango



"Mit welchem Datentyp hast du gerechnet? Du musst long long nehmen. unsigned long kann keine 180 GB darstellen."

Habe uint64_t benutzt.


"Hast du vielleicht eine Partition ausgelesen?"

Nein habe die Festplatte sda ausgelesen.


Hier mal mein Code schnell zusammen gewuerfelt:

C++:
            QByteArray strAscii;
            strAscii = hd.toAscii();
            int fd = open( strAscii.data() , O_RDONLY);
              uint64_t groesse;            

            if(ioctl(fd, BLKGETSIZE64, &groesse)) {
            item->setText(1, QString::number(groesse) );
            item2->setText(1, QString::number(groesse) );
            }





hd ist ein QString und hat den Wert: "/dev/sda"


Bearbeitung von 0xdeadbeef:

cpp-Tags eingefügt, nächstes mal selbst machen.


Dieser Post wurde am 09.10.2009 um 16:24 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
09.10.2009, 16:27 Uhr
0xdeadbeef
Gott
(Operator)



Zitat von Mango:


C++:
            if(ioctl(fd, BLKGETSIZE64, &groesse)) {




ioctl gibt bei Erfolg 0 zurück, sonst -1 (und setzt errno entsprechend). Das bedeutet, das muss

C++:
  if(!ioctl(fd, BLKGETSIZE64, &groesse)) {


heißen, oder

C++:
  if(0 == ioctl(fd, BLKGETSIZE64, &groesse)) {


Ich gehe davon aus, dass du überhaupt nur deshalb etwas angezeigt kriegst, weil du das Programm ohne die notwendigen Zugriffsrechte auf /dev/sda ausführst.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
09.10.2009, 17:36 Uhr
Mango



Verdammt. Ich habe mich schon gewundert. Sry fuer den dummen Fehler.

Wie bekomme ich die Zugriffsrechte? Ok habs mit der Konsole ausprobiert. Funktioniert super, jedoch gibt es eine andere Moeglichkeit Adminrechte zu bekommen?

Dieser Post wurde am 09.10.2009 um 17:45 Uhr von Mango editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: