我正在做一个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;
}
我想知道我在哪里放置这个链表,以便每个进程都可以访问它?
BTW,允许更改系统文件。
答案 0 :(得分:0)
这些真的是系统调用吗?我需要更多信息给你一个全面的答案,但是......
我会将它们作为用户库实现在/ usr / local / lib和/ usr / local / include中,而不是试图将它们放入内核中。
调试内核模块至少可以说是棘手的。添加新的系统调用意味着分支操作系统,因为FreeBSD内核团队可能决定自己添加额外的调用,而且它们会覆盖你的。
假设它们确实需要是系统调用,那么最简单的方法是编写容器设备驱动程序 - 这样,它可以作为内核可加载模块完成,并且不会干扰系统调用编号/命名方案。设备驱动程序将显示一个字符dev条目(例如/ dev / container),然后您可以生成一个库以将writer_container函数连接到设备上的write(2)。同样,可以使用设备上的ioctl(2)完成创建,设置和销毁。
无论哪种方式,您最终都会在/ usr / local中使用.h和.a,以提供所需的接口。为什么你把Container资本化,顺便说一下?