Article View: cn.bbs.comp.unix.programming.kernel
Article #51Fion����sys_semget������(ת��)
From: //sigh�����˼���
Date: Wed, 13 Mar 2002 06:14
Date: Wed, 13 Mar 2002 06:14
67 lines
2791 bytes
2791 bytes
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sem.h>
#include <asm/uaccess.h>
#include <sys/syscall.h>
#define __NR_sem_init 240
#define __NR_sem_rele 241
#define __NR_sem_p 242
#define __NR_sem_v 243
extern void * sys_call_table[];
int (*original_call)(void);
asmlinkage int sys_sem_init(key_t key, int count)
{
int semid;
union semun arg;
arg.val = count;
semid = sys_semget(key, 1, IPC_CREAT|0777);
sys_semctl(semid, 0, SETVAL, arg);
return semid;
}
asmlinkage int sys_sem_rele(int semid)
{
union semun arg;
sys_semctl(semid, 0, IPC_RMID, arg);
return 0;
}
asmlinkage int sys_sem_v(int semid, struct sembuf * psemb)
{
struct sembuf semb;
semb.sem_num = 0;
semb.sem_op = 1;
semb.sem_flg = 0;
copy_to_user(psemb, &semb, sizeof(semb));
return (sys_semop(semid, psemb, 1));
}
asmlinkage int sys_sem_p(int semid, struct sembuf * psemb)
{
struct sembuf semb;
semb.sem_num = 0;
semb.sem_op = -1;
semb.sem_flg = 0;
copy_to_user(psemb, &semb, sizeof(semb));
return (sys_semop(semid, psemb, 1));
}
int module_init()
{
sys_call_table[__NR_sem_init] = sys_sem_init;
sys_call_table[__NR_sem_rele] = sys_sem_rele;
sys_call_table[__NR_sem_p] = sys_sem_p;
sys_call_table[__NR_sem_v] = sys_sem_v;
return 0;
}
int module_cleanup()
{
sys_call_table[__NR_sem_init] = original_call;
sys_call_table[__NR_sem_rele] = original_call;
sys_call_table[__NR_sem_p] = original_call;
sys_call_table[__NR_sem_v] = original_call;
return 0;
}
--
[m[1;34m�� ��Դ:��UNIX��� apue.dhs.org��[FROM: 211.69.197.129][m --
[m[1;37m�� ת��:��UNIX��� apue.dhs.org��[FROM: 211.101.140.97][m
--
[1;36m�� ��:��Luther � 03��13��14:14:38 �ı��ġ�[FROM: 211.101.140.97][m
[m[1;37m�� ת��:��UNIX��� apue.dhs.org��[FROM: 211.101.140.97][m
Technical Details
Message-ID:
<3lIiC2$_ng@apue.dhs.org>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!news.tele.dk!small.news.tele.dk!130.133.1.3!fu-berlin.de!news.cn99.com!news.tiaozhan.com!APUEShow Full Headers
Complete Article Headers
X-Google-Language: ENGLISH,ASCII X-Google-Thread: 10e809,d6f7aded0e949c47,start X-Google-Attributes: gid10e809,public X-Google-ArrivalTime: 2002-03-12 22:28:03 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!news.tele.dk!small.news.tele.dk!130.133.1.3!fu-berlin.de!news.cn99.com!news.tiaozhan.com!APUE From: Luther.bbs@apue.dhs.org (//sigh�����˼���) Newsgroups: cn.bbs.comp.unix.programming.kernel Subject: Fion����sys_semget������(ת��) Date: 13 Mar 2002 06:14:40 GMT Organization: APUE Message-ID: <3lIiC2$_ng@apue.dhs.org> X-Filename: UKP/M.1016000066.A Lines: 67