1

我在做一个freeBSD项目,要求是写四个系统调用:

1. set_containerid(int idnum, pid_t pid)
      //set given pid's container ID to idnum
      //child process should inherit parent's containerID
2.create_container(int perms, char *name)
      //perm = 0 means allowing other processes to read/write this container
3.destroy_container(char *name)
4. write_container(char *name, char *message, int len)
5.read_container(char *name, char *message, int len)

所以,我知道我需要一个链表来保存我自己的数据结构

Container{
  char* name;
  char* buf;
}

我想知道我将这个链接列表放在哪里,以便每个进程都可以访问它?

顺便说一句,允许更改系统文件。

4

1 回答 1

0

这些真的是系统调用吗?我需要更多信息才能给你一个全面的答案,但是......

我会考虑将它们实现为 /usr/local/lib 和 /usr/local/include 中的用户库,而不是尝试将它们放入内核中。

至少可以说调试内核模块很棘手。添加新的系统调用意味着分叉操作系统,因为 FreeBSD 内核团队可能决定自己添加额外的调用,他们会覆盖你的。

假设它们确实需要是系统调用,那么编写它的最简单方法是编写容器设备驱动程序 - 这样,它可以作为内核可加载模块完成,并且不会干扰系统调用编号/命名方案。设备驱动程序会显示一个字符 dev 条目(例如 /dev/container),然后您可以生成一个库来将 writer_container 函数接口到设备上的 write(2)。同样,可以使用设备上的 ioctl(2) 来完成创建、设置和销毁。

无论哪种方式,您最终都会在 /usr/local 中得到一个 .h 和一个 .a,以提供所需的接口。顺便说一句,你为什么要大写 Container?

于 2012-08-07T17:10:24.550 回答