我需要创建一个用户程序,通过系统调用可以查看正在运行的进程数。我发现getsysinfo()函数可以给我结果,但是当我尝试编译代码时出错 我使用了以下代码:
struct kinfo kinfo;
int nr_tasks, nr_procs;
getsysinfo(PM_PROC_NR, SI_KINFO, &kinfo);
nr_procs = kinfo.nr_pro;
问题是,编译时我遇到很多错误。我看到有许多未定义的变量,我不知道应该包含哪些库。代码似乎太浅而无法理解。
答案 0 :(得分:1)
谷歌搜索'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库中。