2012-07-14 42 views
1

我做了FreeBSD项目的要求是写四种系统调用: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; 
} 

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

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

回答

0

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

我会看他们作为用户库在/ usr/local/lib和/ usr/local/include而不是试图把它们实现他们进入内核。

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

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

无论采用哪种方式,您都会在/ usr/local中以.h和.a结尾,以提供所需的接口。为什么你把Container放大,顺便说一句?