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.