Seite 1 von 1

Alle Festplatten anzeigen lassen

Verfasst: 15.08.2013 12:10
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()

Re: Alle Festplatten anzeigen lassen

Verfasst: 15.08.2013 12:46
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?

Re: Alle Festplatten anzeigen lassen

Verfasst: 15.08.2013 13:49
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

Re: Alle Festplatten anzeigen lassen

Verfasst: 15.08.2013 23:25
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

Re: Alle Festplatten anzeigen lassen

Verfasst: 15.08.2013 23:40
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).

Re: Alle Festplatten anzeigen lassen

Verfasst: 16.08.2013 22:38
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

Re: Alle Festplatten anzeigen lassen

Verfasst: 18.08.2013 15:42
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.