您没有为sysctl函数提供正确的值。可以在此处找到有关sysctl()参数的详细信息。
这是您的错误:
- 您忘记了 nlen 参数(第二个参数)
- 所述 oldlenp 参数是一个指向的大小,不直接的大小
这是正确的功能(稍有改进):
def posix_sysctl_long(name): _mem = c_uint64(0) _def = sysctl_names[name] _arr = c_int * len(_def) _name = _arr() for i, v in enumerate(_def): _name[i] = c_int(v) _sz = c_size_t(sizeof(_mem)) result = libc.sysctl(_name, len(_def), byref(_mem), byref(_sz), None, c_size_t(0)) if result != 0: raise Exception('sysctl returned with error %s' % result) return _mem.value


