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