|
@@ -0,0 +1,59 @@ |
|
|
|
|
|
from ctypes import Structure, \
|
|
|
|
|
|
c_uint32, \
|
|
|
|
|
|
c_uint64, \
|
|
|
|
|
|
c_int64, \
|
|
|
|
|
|
c_int, \
|
|
|
|
|
|
c_char, \
|
|
|
|
|
|
CDLL, \
|
|
|
|
|
|
POINTER, \
|
|
|
|
|
|
ARRAY, \
|
|
|
|
|
|
byref
|
|
|
|
|
|
from ctypes.util import find_library
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MFSNAMELEN = 16
|
|
|
|
|
|
MNAMELEN = 1024
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class statfs(Structure):
|
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
statfs._fields_ = [
|
|
|
|
|
|
('f_version', c_uint32),
|
|
|
|
|
|
('f_type', c_uint32),
|
|
|
|
|
|
('f_flags', c_uint64),
|
|
|
|
|
|
('f_bsize', c_uint64),
|
|
|
|
|
|
('f_iosize', c_uint64),
|
|
|
|
|
|
('f_blocks', c_uint64),
|
|
|
|
|
|
('f_bfree', c_uint64),
|
|
|
|
|
|
('f_bavail', c_int64),
|
|
|
|
|
|
('f_files', c_uint64),
|
|
|
|
|
|
('f_ffree', c_int64),
|
|
|
|
|
|
('f_syncwrites', c_uint64),
|
|
|
|
|
|
('f_asyncwrites', c_uint64),
|
|
|
|
|
|
('f_syncreads', c_uint64),
|
|
|
|
|
|
('f_asyncreads', c_uint64),
|
|
|
|
|
|
('f_spare', ARRAY(c_uint64, 10)),
|
|
|
|
|
|
('f_namemax', c_uint32),
|
|
|
|
|
|
('f_owner', c_uint32),
|
|
|
|
|
|
('f_fsid', ARRAY(c_uint32, 2)),
|
|
|
|
|
|
('f_charspare', ARRAY(c_char, 80)),
|
|
|
|
|
|
('f_fstypename', ARRAY(c_char, MFSNAMELEN)),
|
|
|
|
|
|
('f_mntfromname', ARRAY(c_char, MNAMELEN)),
|
|
|
|
|
|
('f_mntonname', ARRAY(c_char, MNAMELEN))
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
libc = CDLL(find_library('c'))
|
|
|
|
|
|
|
|
|
|
|
|
def getdict(struct):
|
|
|
|
|
|
return dict((field, getattr(struct, field)) for field, _ in struct._fields_)
|
|
|
|
|
|
|
|
|
|
|
|
_getmntinfo = libc.getmntinfo
|
|
|
|
|
|
_getmntinfo.argtypes = [ POINTER(POINTER(statfs)), c_int ]
|
|
|
|
|
|
|
|
|
|
|
|
def getmntinfo():
|
|
|
|
|
|
p = POINTER(statfs)()
|
|
|
|
|
|
n = _getmntinfo(byref(p), c_int(1))
|
|
|
|
|
|
res = [ getdict(p[i]) for i in range(n) ]
|
|
|
|
|
|
return res
|