Alle Festplatten anzeigen lassen

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
kevv
Beiträge: 31
Registriert: 28.11.2010 15:52

Alle Festplatten anzeigen lassen

Beitrag von kevv »

Hi
weiß jemand wie man unter Linux die Festplattennamen auslesen kann ?


Windows Beispiel

Code: Alles auswählen

Procedure.s Volume2()
lpBuffer$=Space(#MAX_PATH)
GetLogicalDriveStrings_(255,@lpBuffer$)
BufferIndex.l=@lpBuffer$

While PeekB(BufferIndex) <> 0 
  If GetDriveType_(BufferIndex) =3
    Result$=Result$+PeekS(BufferIndex)+"  "
  EndIf  
    BufferIndex+4
Wend
  ProcedureReturn Result$
EndProcedure

Debug Volume2()
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8806
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Alle Festplatten anzeigen lassen

Beitrag von NicTheQuick »

Meinst du eine Auflistung aller auf ein Verzeichnisse gemounteten Geräte? Oder wirklich echte Festplatten, die per IDE, SATA oder USB angeschlossen sind? Sollen auch nicht gemountete Geräte aufgelistet werden oder nur die, die tatsächlich gerade gemountet sind?
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Re: Alle Festplatten anzeigen lassen

Beitrag von Shardik »

In der Konsole lassen sich mit blkid Infos über alle Volumes (auch die nicht eingehängten) anzeigen. Das folgende Beispielprogramm nutzt blkid, um diese Informationen abzurufen, die Volume Labels (= Partitionsnamen) herauszufiltern und anzuzeigen (getestet mit Kubuntu 12.04 x86 und PB 5.11):

Code: Alles auswählen

ProgramID = RunProgram("blkid", "", "", #PB_Program_Open | #PB_Program_Read)

If ProgramID
  While ProgramRunning(ProgramID)
    If AvailableProgramOutput(ProgramID)
      Output$ + ReadProgramString(ProgramID) + #LF$
      LineCount + 1
    EndIf
  Wend
 
  CloseProgram(ProgramID)

  For i = 1 To LineCount
    Line$ = StringField(Output$, i, #LF$)

    If FindString(Line$, "LABEL=")
      Debug StringField(Line$, 2, #DQUOTE$)
    EndIf
  Next i
EndIf
Zuletzt geändert von Shardik am 16.08.2013 08:40, insgesamt 1-mal geändert.
kevv
Beiträge: 31
Registriert: 28.11.2010 15:52

Re: Alle Festplatten anzeigen lassen

Beitrag von kevv »

@NicTheQuick
echte Festplatten, die per IDE, SATA oder USB angeschlossen sind



Bin auf den Befehl mount gestoßen, und damit klappt es Gans gut
alle meine Festplatten und usb Sticks werden angezeigt.

getestet unter Linux Mint 14

Code: Alles auswählen

ProgramID = RunProgram("mount", "", "", #PB_Program_Open | #PB_Program_Read)

If ProgramID
  While ProgramRunning(ProgramID)
    If AvailableProgramOutput(ProgramID)
      Output$ + ReadProgramString(ProgramID) + #LF$
      LineCount + 1
    EndIf
  Wend
  ;Debug Output$
 CloseProgram(ProgramID)

  For i = 1 To LineCount
    Line$ = StringField(Output$, i, #LF$)
    If FindString(Line$, "type fuseblk") Or FindString(Line$, "type vfat")
      Debug StringField(Line$, 3, " ")
    EndIf
  Next i
EndIf
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Re: Alle Festplatten anzeigen lassen

Beitrag von MVXA »

kevv hat geschrieben:@NicTheQuick
echte Festplatten, die per IDE, SATA oder USB angeschlossen sind



Bin auf den Befehl mount gestoßen, und damit klappt es Gans gut
alle meine Festplatten und usb Sticks werden angezeigt.

getestet unter Linux Mint 14
Das ist nicht so einfach wie du dir das vorstellst ;). Was willst du denn wirklich wissen? Eingehängte Dateisysteme? Partitionen? Block Devices? Angeschlossene Festplatten im Sinne der Geräte? Pools? All diese Objekte können auf verschiedene Wege ermittelt werden und der einheitliche Weg über Udisks/Dbus ist nicht der einfachste unter PureBasic.

Mount liefert dir nur die eingehängten Dateisysteme, die dahinterliegenden Gerätedateien spiegeln nicht zwingend physikalische Festplatten oder gar Partitionen wieder sondern nur Blockdevices und nicht einmal zwingend das (FUSE).
Bild
kevv
Beiträge: 31
Registriert: 28.11.2010 15:52

Re: Alle Festplatten anzeigen lassen

Beitrag von kevv »

Ich wollte per ExamineDirectory(0, Directory$, "*.*") auf USB und externen festplatten zugreifen, sobald welche angeschlossen werden.
Ich denke der Mount snippet reicht für mich erstmal aus.
Danke an alle
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Re: Alle Festplatten anzeigen lassen

Beitrag von MVXA »

Falls du Interesse hast noch weiter an deiner Lösung herumzuschrauben: du kannst auch mittels einer UDev Regel ein Script/Programm starten, falls per USB eine externe Festplatte angeschlossen wird. Es ist effizienter sich vom Kernel über Ereignisse informieren zu lassen als selbst immer wieder zu prüfen, ob ein Ereignis eingetroffen ist.
Bild
Antworten