我需要创建一个用户程序,该程序可以在系统调用的帮助下查看正在运行的进程数。我发现getsysinfo()函数可以给我结果,但是在尝试编译代码时出现错误。
我使用以下代码:

struct kinfo kinfo;
int nr_tasks, nr_procs;
getsysinfo(PM_PROC_NR, SI_KINFO, &kinfo);
nr_procs = kinfo.nr_pro;


问题是,编译时出现很多错误。我看到有许多未定义的变量,而且我不知道应该包括哪些库。该代码似乎太浅而无法理解。

最佳答案

Google在搜索“ minix getsysinfo”时发现了各种来源,包括:


How does function getsysinfo work in Minix

这表明,除其他外,该功能只能在内核内部访问,而不能在用户代码中访问。它还包含与您显示的内容非常相似的代码片段以及注释:

endpoint_t who // from whom to request info
int what // what information is requested
void *where // where to put it
size_t size // how big it should be


例:

struct kinfo pinf;
int num_procs;
getsysinfo(PM_PROC_NR, SI_KINFO, &pinf);
num_procs = pinf.nr_pro;


至少有些奇怪的是,描述中显示了“ 4个参数”,而该示例仅使用了“ 3个参数”(您的代码也是如此)。
Minix identifier search: getsysinfo()


  定义为以下功能:

   minix/lib/libsys/getsysinfo.c, line 8

  
  在以下位置定义为函数原型:

   minix/include/minix/sysinfo.h, line 8



还引用的代码片段之一显示了一个调用:


  if (getsysinfo(RS_PROC_NR, SI_PROCPUB_TAB, rprocpub, sizeof(rprocpub)) != OK …



这显示了描述的第四个参数,但问题中引用的示例和第一个链接中省略了该参数。


这些和其他参考都看起来像内核代码,而不是用户代码。因此,从表面上看,如果您正在为Minix编写用户端程序,则无法访问此函数,因为它在内核中,而不在用户可调用的C库中。

08-17 00:51