📄 ipc.c
字号:
/* libc/sys/linux/ipc.c - IPC semaphore and message queue functions *//* Copyright 2002, Red Hat Inc. */#include <sys/types.h>#include <sys/sem.h>#include <sys/msg.h>#include <stdarg.h>#include <machine/syscall.h>#define IPC_64 0x100#define IPCOP_semop 1#define IPCOP_semget 2#define IPCOP_semctl 3#define IPCOP_msgsnd 11#define IPCOP_msgrcv 12#define IPCOP_msgget 13#define IPCOP_msgctl 14static _syscall5(int,ipc,int,op,int,arg1,int,arg2,int,arg3,void *,arg4);intsemget (key_t key, int nsems, int semflgs){ return __libc_ipc(IPCOP_semget, (int)key, nsems, semflgs, NULL);}intsemctl (int semid, int semnum, int cmd, ...){ va_list va; union semun { int val; struct semid_ds *buf; unsigned short *array; } arg; va_start (va, cmd); arg = va_arg (va, union semun); va_end (va); return __libc_ipc(IPCOP_semctl, semid, semnum, cmd | IPC_64, &arg);}intsemop (int semid, struct sembuf *sops, size_t nsems){ return __libc_ipc(IPCOP_semop, semid, (int)nsems, 0, sops);}intmsgget (key_t key, int msgflg){ return __libc_ipc(IPCOP_msgget, (int)key, msgflg, 0, NULL);}intmsgctl (int msqid, int cmd, struct msqid_ds *buf){ return __libc_ipc(IPCOP_msgctl, msqid, cmd | IPC_64, 0, buf);}intmsgsnd (int msqid, const void *msgp, size_t msgsz, int msgflg){ return __libc_ipc(IPCOP_msgsnd, msqid, (int)msgsz, msgflg, (void *)msgp);}intmsgrcv (int msqid, void *msgp, size_t msgsz, long int msgtyp, int msgflg){ /* last argument must contain multiple args */ struct { void *msgp; long int msgtyp; } args; args.msgp = msgp; args.msgtyp = msgtyp; return (ssize_t)__libc_ipc(IPCOP_msgrcv, msqid, (int)msgsz, msgflg, &args);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -