我想在 C 代码中获取 kernel.shmmax 的值(我使用 shell 命令“$ sysctl -q kernel.shmmax”在 centos5.0、centos6.0 和 ubuntu10.04 上查询)。
我使用以下代码找到它:
#include <sys/sysctl.h>
const int SHM_ERROR=1;
main(){
int name[] = {KERN_SHMMAX};
int namelen = 1;
int oldval[1];
size_t oldlen = sizeof(oldval);
int rv = sysctl(name, namelen, (void*) oldval, &oldlen, NULL, 0);
if (rv!=0) {
fprintf(stderr, "while quering for shared memory size, sysctl returned error: %s\n", strerror(errno));
return SHM_ERROR;
}
else{
return 0;
}
}
运行上面的代码后,我收到以下错误:
查询共享内存大小时,sysctl 返回错误:不是目录
我对为什么会收到此错误一无所知。我搜索了一下,发现库试图查看的路径存在一些问题。
我尝试使用 GDB 运行上述代码,但代码没有进入函数 sysctl,否则我可以为您提供更多信息。
数据点:我可以使用以下命令轻松地在所有提到的操作系统上从命令行设置和获取 kernel.shmmax:
$ sysctl -q kernel.shmmax
$ sysctl -w kernel.shmmax=1000000000
谢谢