🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: cn.bbs.comp.unix.programming.kernel
Article #51

Fion����sys_semget������(ת��)

#51
From: //sigh�����˼���
Date: Wed, 13 Mar 2002 06:14
67 lines
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;
}
--
�� ��Դ:��UNIX��� apue.dhs.org��[FROM: 211.69.197.129] --
�� ת��:��UNIX��� apue.dhs.org��[FROM: 211.101.140.97]
--
�� �޸�:��Luther � 03��13��14:14:38 �޸ı��ġ�[FROM: 211.101.140.97]
�� ת��:��UNIX��� apue.dhs.org��[FROM: 211.101.140.97]
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!APUE

Show 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