Tag: sysctl

为什么sysctl在Mac OS X上生成E_INVAL?

下面是一个C / Obj-C代码的简化(错误/空检查省略)片段,它使用sysctl来获取PID 50的特定进程的argv。 … int getProcessArgs[3] = { CTL_KERN, KERN_PROCARGS, 50 }; sysctl(getProcessArgs, 3, NULL, &length, NULL, 0); char* processArgs = malloc(length * sizeof(char)); sysctl(getProcessArgs, 3, processArgs, &length, NULL, 0); … 第一次调用sysctl(确定argv字符串数组的大小)成功。 返回的长度约为1600,比我预期的要大,但我认为并非不合理。 Malloc成功了。 第二次调用sysctl返回-1,将errno设置为22,E_INVAL。 我已经查看了其他代码,包括来自这个问题的代码,但是看不到我的问题。 我错过了什么?