|
- 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
|