微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python ctypes和sysctl

我有以下代码

import sys from ctypes import * from ctypes.util import find_library libc = cdll.LoadLibrary(find_library("c")) CTL_KERN = 1 KERN_SHMMAX = 34 sysctl_names = { 'memory_shared_buffers' : (CTL_KERN,KERN_SHMMAX),} def posix_sysctl_long(name): _mem = c_uint64(0) _arr = c_int * 2 _name = _arr() _name[0] = c_int(sysctl_names[name][0]) _name[1] = c_int(sysctl_names[name][1]) result = libc.sysctl(_name,byref(_mem),c_size_t(sizeof(_mem)),None,c_size_t(0)) if result != 0: raise Exception('sysctl returned with error %s' % result) return _mem.value print posix_sysctl_long('memory_shared_buffers')

产生如下结果:

Traceback (most recent call last): File "test.py",line 23,in <module> print posix_sysctl_long('memory_shared_buffers') File "test.py",line 20,in posix_sysctl_long raise Exception('sysctl returned with error %s' % result) Exception: sysctl returned with error -1

我觉得我做错了什么。 什么是正确的调用约定? 我怎么知道究竟出了什么问题?

Directory.GetFiles不返回文件

ACL上的Windows共享

编译后自动设置文件版本

如何用单个信号处理程序解决这个多个linux定时器

.NET 4.0 – AccessViolationException和WndProc

Doxygen,在graphics类层次结构中什么也没有显示出来

如何正确使用copyFileEx和copyProgressRoutine函数

在Mono上使用system.windows.forms在Linux上开发

WPF:使窗口不可调整,但保持框架?

在程序运行的时候可以获得程序的输出吗?

你没有提供正确的值到sysctl函数。 有关sysctl()的参数的详细信息可以在这里找到。

这是你的错误

你已经忘记了无意义的论点(第二个论点)

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(_sz),c_size_t(0)) if result != 0: raise Exception('sysctl returned with error %s' % result) return _mem.value

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐