当前位置: 技术问答>linux和unix
自己写系统调用时需要共享数据如何解决
来源: 互联网 发布时间:2016-09-05
本文导语: 实现信号灯操作的系统调用 增加四个系统调用: create_sema 原型 int create_sema(char *name, int vaule); 功能 创建一个名称为name, 初始值为value的信号灯。 返回值 成功返回0,失败返回-1。 destroy_sema 原型 int destroy_sema(...
实现信号灯操作的系统调用
增加四个系统调用:
create_sema
原型
int create_sema(char *name, int vaule);
功能
创建一个名称为name, 初始值为value的信号灯。
返回值
成功返回0,失败返回-1。
destroy_sema
原型
int destroy_sema(char *name);
功能
删除名称为name的信号灯。
返回值
成功返回0,失败返回-1。
wait_sema
原型
int wait_sema(char *name);
功能
对名称为name的信号灯的进行wait操作。
返回值
成功返回0,失败返回-1。
signal_sema
原型
int signal_sema(char *name);
功能
对名称为name的信号灯的进行signal操作。
返回值
成功返回0,失败返回-1。
显然这个系统调用要写四个程序,不放设为create_sema.cc destroy_sema.cc wait_sema.cc signal_sema.cc
这里的四个系统调用都要用到
struct semaphore_t {
char name[16];
int value;
waitq_t waitq;
semaphore_t * next;
};
semaphore_t * semaphore_list;
的数据结构,很疑惑这部分应该放在什么地方?
例如放在create_sema.cc文件中的syscreate_sema函数的前面,或是作为.h文件被.cc文件包含?
增加四个系统调用:
create_sema
原型
int create_sema(char *name, int vaule);
功能
创建一个名称为name, 初始值为value的信号灯。
返回值
成功返回0,失败返回-1。
destroy_sema
原型
int destroy_sema(char *name);
功能
删除名称为name的信号灯。
返回值
成功返回0,失败返回-1。
wait_sema
原型
int wait_sema(char *name);
功能
对名称为name的信号灯的进行wait操作。
返回值
成功返回0,失败返回-1。
signal_sema
原型
int signal_sema(char *name);
功能
对名称为name的信号灯的进行signal操作。
返回值
成功返回0,失败返回-1。
显然这个系统调用要写四个程序,不放设为create_sema.cc destroy_sema.cc wait_sema.cc signal_sema.cc
这里的四个系统调用都要用到
struct semaphore_t {
char name[16];
int value;
waitq_t waitq;
semaphore_t * next;
};
semaphore_t * semaphore_list;
的数据结构,很疑惑这部分应该放在什么地方?
例如放在create_sema.cc文件中的syscreate_sema函数的前面,或是作为.h文件被.cc文件包含?
|
extern semaphore_t * semaphore_list; /* 把此语句放到一个头文件里,所有的.c文件包含它即可 */
|
用EXPORT_SYMBOL吧