statvfs angepasst als Modul und zur einfacheren verwendung.

This commit is contained in:
René Linder 2019-07-04 17:28:46 +02:00
parent c02d135541
commit 629a1515e7
1 changed files with 70 additions and 54 deletions

View File

@ -1,4 +1,6 @@
; Module/File: System_FreeDiscSpace.pb ; Original:
; -------------------------------------------------------------
; Module/File: System_FreeDiscSpace.pb
; Function: Get free + used Drive-space from Directory - Linux ; Function: Get free + used Drive-space from Directory - Linux
; Author: remi_meier/uwekel (omi) ; Author: remi_meier/uwekel (omi)
; Date: Mar. 27, 2015 ; Date: Mar. 27, 2015
@ -9,60 +11,74 @@
; Link to topic: http://www.purebasic.fr/german/viewtopic.php?f=21&t=22963 ; Link to topic: http://www.purebasic.fr/german/viewtopic.php?f=21&t=22963
;-------------------------------------------------------------- ;--------------------------------------------------------------
;**************************************
;*
;* Erweitert: und Umgestellt als Modul
;*
;* lhs_statvfs.pbi
;*
;* (c) by René Linder
;*
;* Lizenz LGPL V2.1 < TODO: Abklären ob Lizenz akzeptiert wird ...
;*
;* Getesteter Compiler PureBasic 5.70/5.71b2
;*
EnableExplicit CompilerIf #PB_Compiler_OS <> #PB_OS_Linux
CompilerError "Dieses Modul ist nur für Linux"
CompilerEndIf
Structure Statvfs DeclareModule statvfs
f_bsize.i; file system block size Declare Size(Path.s)
f_frsize.i; fragment size Declare Free(Path.s)
f_blocks.i; size of fs in f_frsize units Declare Used(Path.s)
f_bfree.i; free blocks EndDeclareModule
f_bavail.i; free blocks for unprivileged users
f_files.i; inodes
f_ffree.i; free inodes
f_favail.i; free inodes for unprivileged users
f_fsid.i; file system ID
CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
__f_unused.l
CompilerEndIf
f_flag.i; mount flags: 1=readonly 2= nosuid
f_namemax.i; maximum filename length
__f_spare.l[6]
EndStructure
Structure DriveInfoResult Module statvfs
Size.q Structure Statvfs
Used.q f_bsize.i; file system block size
Free.q f_frsize.i; fragment size
EndStructure f_blocks.i; size of fs in f_frsize units
f_bfree.i; free blocks
f_bavail.i; free blocks for unprivileged users
f_files.i; inodes
f_ffree.i; free inodes
f_favail.i; free inodes for unprivileged users
f_fsid.i; file system ID
CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
__f_unused.l
CompilerEndIf
f_flag.i; mount flags: 1=readonly 2= nosuid
f_namemax.i; maximum filename length
__f_spare.l[6]
EndStructure
ImportC "" ImportC ""
statvfs.l(Path.p-utf8, *value.Statvfs) statvfs.l(Path.p-utf8, *value.Statvfs)
EndImport EndImport
Global Drive.DriveInfoResult ; Global Drive.DriveInfoResult
Procedure Size(Path.s)
Protected Size.i
Protected v.statvfs
Procedure.q DriveInfo(Path.s, *Result.DriveInfoResult) Statvfs(Path, v)
Protected v.statvfs Size = v\f_blocks * v\f_frsize
Statvfs(Path, v) ProcedureReturn Size
*Result\Size= v\f_blocks * v\f_frsize EndProcedure
*Result\Used= (v\f_blocks - v\f_bfree) * v\f_frsize
*Result\Free= v\f_bavail * v\f_frsize Procedure Free(Path.s)
EndProcedure Protected Free.i
Protected v.statvfs
Statvfs(Path, v)
DriveInfo(GetHomeDirectory(), Drive); choose any directory from drive of interrest Free= v\f_bavail * v\f_frsize
Debug "Drive-Info: " + GetHomeDirectory() ProcedureReturn Free
Debug "Size: " + Str(Drive\Size) EndProcedure
Debug "Used: " + Str(Drive\Used)
Debug "Free: " + Str(Drive\Free) Procedure Used(Path.s)
Debug "---" Protected Used.i
; Protected v.statvfs
; DriveInfo("/media/charly/96A2-6D58/", Drive); choose your USB-Stick Statvfs(Path, v)
; Debug "Drive-Info: " + "/media/charly-xubuntu/96A2-6D58/" Used = (v\f_blocks - v\f_bfree) * v\f_frsize
; Debug "Size: " + Str(Drive\Size) ProcedureReturn Used
; Debug "Used: " + Str(Drive\Used) EndProcedure
; Debug "Free: " + Str(Drive\Free) EndModule
; Debug "---"