Gibt es einen Befehl in c++ um sich alle Festplatten anzeigen zu lassen?

5 Antworten

In C++ allgemein nicht, da es sich um ein Betriebssystem-abhängiges Feature handelt.

Das bedeutet, dass es in den unterschiedlichen Betriebssystemen zwar meistens Befehle dafür gibt, aber es gibt keinen Befehl, der für alle Betriebssysteme gleich ist (es sei denn, du verwendest zusätzliche Libraries).

Du müsstest also noch dazu schreiben, welches Betriebssystem du nutzt.

Wie man es unter Windows macht, hat der User "IchbineinJude" ja bereits beschrieben.

Leider gibt es unter keinem Betriebssystem "ganz kurze" Befehle für so etwas.

wolfgang1956  03.08.2015, 07:31

Und wozu gibt es in Windows den Windows-Explorer? Der zeigt alle angeschlossenen Laufwerke an … :-)

0

Davon ausgehend, dass du Windows verwendest:

GetLogicalDriveStrings()

#include <windows.h> #include <stdio.h> DWORD mydrives = 100;// buffer length char lpBuffer[100];// buffer for drive string storage int main() { DWORD test = GetLogicalDriveStrings( mydrives, lpBuffer); printf("The logical drives of this machine are:\n\n"); for(int i = 0; i<100; i++) printf("%c", lpBuffer[i]); printf("\n"); return 0; }

GetLogicalDrives()

#include <windows.h> #include <direct.h> #include <stdio.h> #include <tchar.h> // initial value TCHAR szDrive[ ] = _T(" A:"); int main() { DWORD uDriveMask = GetLogicalDrives(); printf("The bitmask of the logical drives in hex: %0X\n", uDriveMask); printf("The bitmask of the logical drives in decimal: %d\n", uDriveMask); if(uDriveMask == 0) printf("\nGetLogicalDrives() failed with failure code: %d\n", GetLastError()); else { printf("\nThis machine has the following logical drives:\n"); while(uDriveMask) {// use the bitwise AND, 1–available, 0-not available if(uDriveMask & 1) printf("%s\n",szDrive); // increment...  ++szDrive[1]; // shift the bitmask binary right uDriveMask >>= 1; } printf("\n "); } return 0; }

AllAboutPC 
Fragesteller
 02.08.2015, 17:12

Gibt es nicht auch ganz kurze befehle ?

0
IchbineinJude  02.08.2015, 17:45
@AllAboutPC

C++ ist eine Programmiersprache ... wen du Befehle haben willst, dann solltest du Terminalbefehle nutzen. Und da ist die Frage: welches System benutzt du?

Unter Linux ist es dieser Befehl: sudo lshw > hardware.txt

Ich benutze kein Windows, also weiß ich es nicht dafür. Müsstest du aber ganz leicht selbst herausfinden können: Einfach Hardware Information Windows Terminal Command googeln.

1
RakonDark  03.08.2015, 00:18
@AllAboutPC

Ich bin mir nicht sicher ob du vielleicht c++ nicht nutzen solltest . Bei Dir wäre wohl Batch eher angesagt , wie kann man nur so faul sein .

0
AllAboutPC 
Fragesteller
 03.08.2015, 10:06

Dich hat aber keiner gefragt @RakonDark

0
RakonDark  03.08.2015, 12:02
@AllAboutPC

Doch , tauchte sogar in meiner Liste auf . Kritik heist , du bist sowas von Faul und hast dich noch nicht einmal in die Materie Programmieren eingelesen , sonst würdest Du sowa gar nicht Fragen .

Da macht sich einer die Arbeit und Du gibst so eine Dumme Antwort .

0

In Standard c++ gibt es das nicht. Es gibt abhängig vom Betriebssystem verschiedene Möglichkeiten herauszufinden, welche Festplatten es gibt. Sicher keine Einzeiler.

wolfgang1956  03.08.2015, 07:32

Und wozu gibt es in Windows den Windows-Explorer? Der zeigt alle angeschlossenen Laufwerke an … :-)

0

die FB sind normal im Bios aufgeführt

AllAboutPC 
Fragesteller
 02.08.2015, 17:09

Ja und ? Gibt es nicht ein Befehl wo mit man sich die Festplatten anzeigen lassen kann ?

0
newcomer  02.08.2015, 17:12
0
newcomer  02.08.2015, 17:12
@newcomer C/C++ Beispielcode
 
#define CMOS_PORT_ADDRESS 0x70
#define CMOS_PORT_DATA    0x71
 
/** * Liest ein Byte aus den CMOS * @param offset Offset im CMOS * @return Gelesener Wert */
uint8_t cmos_read(uint8_t offset) {
  uint8_t tmp = inb(CMOS_PORT_ADDRESS);
  outb(CMOS_PORT_ADDRESS, (tmp & 0x80) | (offset & 0x7F));
  return inb(CMOS_PORT_DATA);
}
 
/** * Schreibt ein Byte in das CMOS * @param offset Offset im CMOS * @param val Zu schreibender Wert */
void cmos_write(uint8_t offset,uint8_t val) {
  uint8_t tmp = inb(CMOS_PORT_ADDRESS);
  outb(CMOS_PORT_ADDRESS, (tmp & 0x80) | (offset & 0x7F));
  outb(CMOS_PORT_DATA,val);
}
0
martin7812  02.08.2015, 17:28
@newcomer

Das ganze würde unter MS-DOS und unter Windows 95 noch ganz gut funktionieren, unter Windows NT, 2000, XP, Vista und 7 kann man die Befehle "outb" und "inb" allerdings nur in Treibern benutzen. Das Betriebssystem würde ein Programm, das so einen Befehl aufruft, sofort mit einer "allgemeinen Schutzverletzung" beenden.

Unter Linux kann man beide Befehle nur dann aufrufen, wenn man vorher "iopl(3)" aufgerufen hat. Dieser Befehl benötigt allerdings "root"-Rechte.

2
wolfgang1956  03.08.2015, 07:31

Und wozu gibt es in Windows den Windows-Explorer? Der zeigt alle angeschlossenen Laufwerke an … :-)

0

Zeigt die der Windows-Explorer nicht an? Der ist doch dafür prädestiniert … :-)

Er zeigt die eingebauten Laufwerke an und ggf. externe Laufwerke, sofern die auch angeschlossen sind und laufen … :-)