- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有以下代码
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
我想我做错了什么。正确的调用约定是什么?我如何找出到底出了什么问题?
最佳答案
您没有为 sysctl 函数提供正确的值。可以找到有关 sysctl() 参数的详细信息 here .
这是你的错误:
这是正确的函数(略有改进):
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
关于python ctypes 和 sysctl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/759892/
我正在尝试制作一个读取系统信息(在 MacOS 上)的应用程序,并且我已经能够像这样读取 sysctl STRINGS: func cpu() -> String { var size =
我查看了手册页和文档,但它们只讨论了命令行调用。我说的是 C 函数。关于它的两个问题: C 中 sysctl() 的参数是什么? (我只想要一个将军描述每个参数是什么以及它的用途) sysctl()
考虑这段代码: int procmon_state = 0; static struct ctl_table_header *procmon_table_header; static ctl_tabl
Scanario:我有一个容器镜像,需要使用net.core.somaxconn> default_value运行。我正在使用Kubernetes在GCE中部署和运行。 我的集群中的节点(vms)配置
我需要一种方法来检索 Mac 上所有用户的所有正在运行的进程(使用 Cocoa)。我找到了一个使用 sysctl 检索进程的实现,但我还需要运行用户。这是我获取进程列表的截图,但是有没有办法修改它以包
在我的应用程序中,我需要在 Android 中编辑 sysctl 设置。对于 example,我见过很少的应用程序可以做到这一点但我不知道他们如何以编程方式执行此操作,是否有任何想法如何执行此操作?
在 4.10.0-38-generic 版本中,ctl_table 结构中没有 ctl_name 字段我找到了教程 https://www.google.com/url?sa=t&rct=j&q=&e
我有以下代码 import sys from ctypes import * from ctypes.util import find_library libc = cdll.LoadLibrary(
我的实际限制是 1024: $ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d
我在 docker-compose 文件中有一个 sysctls 设置,但据我了解,此指令在版本 3 中被忽略: sysctls: - net.core.somaxconn = 655
我正在尝试在 Kubernetes Kind 集群中部署一个容器。我尝试部署的容器需要设置几个 sysctls 标志。 部署失败 forbidden sysctl: "kernel.msgmnb" n
我正在尝试从内核模块访问 tcp_input.c 中定义的 tcp_pacing_ss_ratio。可以在用户空间使用 sysctl 命令修改该变量。但是,它不会导出,也不能直接从模块中引用。 从内核
为什么我们要在Linux中配置hugepage值? 我们什么时候配置hugepage值以及如何计算hugepage值? 最佳答案 当需要在 RAM 中连续(按顺序)分配大内存页时,通常会配置大页值。
要在内核模式和用户空间进行通信,我使用 this C program .我正在使用以下 Makefile 创建要加载的 .ko 文件。 bj-m := sysctl_test.o KDIR
我正在运行 x86_64 RedHat 5.3(内核 2.6.18)并在尝试设置 UDP 缓冲区的上下文中专门查看来自 sysctl -a 的 net.core.rmem_max。接收器应用程序有时会
我有一个剧本,其中有几个任务将值设置为 sysctl。我如何使用 sysctl 模块通过一个任务设置所有值,而不是为每个设置设置一个任务? 剧本片段: - name: Set tcp_keepaliv
14 "Mojave"在我的 macbook 上,我正在尝试增加 fs.inotify.max_user_watches值在 /etc/sysctl.conf (解决另一个问题)。为了结束这个仪式,我
Nginx 充当广告服务器的反向代理,每分钟接收 2 万个请求。响应发生在从广告服务器到 nginx 的 100 毫秒内 在配置为的虚拟机上运行 128GB 内存 4 个虚拟 CPU 100GB 硬盘
我需要更新 /etc/sysctl.conf,但如果更改,我需要运行 systemctl -p --system。 如何在我的剧本中实现这一目标? 最佳答案 您可以通过使用处理程序或注册任务并有条件地
我正在尝试制作我的第一个 dockerfile(我是新手),我需要系统运行命令 sysctl -w kernel.randomize_va_space=0 (它是一个实验室环境。),但我收到错误: s
我是一名优秀的程序员,十分优秀!