sysctl()的参数是什么?

6

我查看了手册和文档,但它们只讨论了命令行调用。我所说的是C函数。有两个问题:

  • sysctl()在C语言中有哪些参数?(我只想知道每个参数的一般描述以及它的用途)
  • sysctl()在Mac OS X Lion上是否仍然有效?

我使用的是Mac OS X Snow Leopard和Xcode 3.2.6。


1
尝试使用命令man 3 sysctl。或者搜索谷歌... - Brian Roach
1
@BrianRoach 我已经谷歌搜索过了,但是找不到任何有关该函数完整描述的链接。 man 3 sysctl 提供了参数,但没有它们的实际描述。 - fdh
1
LINUX SYSCTL(2)MAN PAGE描述了参数; 它还强烈建议不要使用它。我不知道这对MacOS有多大的相关性。 - Keith Thompson
1个回答

15

好的,引用此页面上的内容,假设它具有原型:

int sysctl (int *name,
            int nlen, 
            void *oldval,
            size_t *oldlenp,
            void *newval, 
            size_t newlen);

那么它的参数如下:

  • name -> 指向整数数组的指针:每个整数值都标识一个sysctl项,可以是目录或叶节点文件。这些值的符号名称在<linux/sysctl.h>中定义。
  • nlen -> 列出数组名称中有多少个整数数字:要到达特定条目,您需要通过子目录指定路径,因此需要告诉路径长度。
  • oldval -> 是指向数据缓冲区的指针,其中必须存储sysctl项目的旧值。如果为NULL,则系统调用将不会返回值到用户空间。
  • oldlenp -> 指向一个整数,表示oldval缓冲区的长度。系统调用更改该值以反映已写入多少数据,可能小于缓冲区长度。
  • newval -> 指向承载替换数据的数据缓冲区:内核将读取此缓冲区以更改正在处理的sysctl条目。如果为NULL,则不更改内核值。
  • newlen -> 是newval的长度。内核将从newval读取不超过newlen字节。

我建议你阅读整个页面,因为它提供了更详细的信息。至于它在Mac OS X Lion中是否有效,我不确定,但我能想象。

希望我有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接