⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ipc.h

📁 关系型数据库 Postgresql 6.5.2
💻 H
字号:
/*------------------------------------------------------------------------- * * ipc.h *	  POSTGRES inter-process communication definitions. * * * Copyright (c) 1994, Regents of the University of California * * $Id: ipc.h,v 1.34 1999/02/21 01:41:47 tgl Exp $ * * NOTES *	  This file is very architecture-specific.	This stuff should actually *	  be factored into the port/ directories. * * Some files that would normally need to include only sys/ipc.h must * instead included this file because on Ultrix, sys/ipc.h is not designed * to be included multiple times.  This file (by virtue of the ifndef IPC_H) * is. *------------------------------------------------------------------------- */#ifndef IPC_H#define IPC_H#include <sys/types.h>#include <sys/ipc.h>			/* For IPC_PRIVATE */#include <config.h>#ifndef HAVE_UNION_SEMUNunion semun{	int			val;	struct semid_ds *buf;	unsigned short *array;};#endiftypedef uint16 SystemPortAddress;/* semaphore definitions */#define IPCProtection	(0600)	/* access/modify by user only */#define IPC_NMAXSEM		25		/* maximum number of semaphores */#define IpcSemaphoreDefaultStartValue	255#define IpcSharedLock									(-1)#define IpcExclusiveLock						  (-255)#define IpcUnknownStatus		(-1)#define IpcInvalidArgument		(-2)#define IpcSemIdExist			(-3)#define IpcSemIdNotExist		(-4)typedef uint32 IpcSemaphoreKey; /* semaphore key */typedef int IpcSemaphoreId;/* shared memory definitions */#define IpcMemCreationFailed	(-1)#define IpcMemIdGetFailed		(-2)#define IpcMemAttachFailed		0typedef uint32 IPCKey;#define PrivateIPCKey	IPC_PRIVATE#define DefaultIPCKey	17317typedef uint32 IpcMemoryKey;	/* shared memory key */typedef int IpcMemoryId;/* ipc.c */extern void proc_exit(int code);extern void shmem_exit(int code);extern int	on_shmem_exit(void (*function) (), caddr_t arg);extern int	on_proc_exit(void (*function) (), caddr_t arg);extern void on_exit_reset(void);extern IpcSemaphoreId IpcSemaphoreCreate(IpcSemaphoreKey semKey,				   int semNum, int permission, int semStartValue,				   int removeOnExit, int *status);extern void IpcSemaphoreKill(IpcSemaphoreKey key);extern void IpcSemaphoreLock(IpcSemaphoreId semId, int sem, int lock);extern void IpcSemaphoreUnlock(IpcSemaphoreId semId, int sem, int lock);extern int	IpcSemaphoreGetCount(IpcSemaphoreId semId, int sem);extern int	IpcSemaphoreGetValue(IpcSemaphoreId semId, int sem);extern IpcMemoryId IpcMemoryCreate(IpcMemoryKey memKey, uint32 size,				int permission);extern IpcMemoryId IpcMemoryIdGet(IpcMemoryKey memKey, uint32 size);extern char *IpcMemoryAttach(IpcMemoryId memId);extern void IpcMemoryKill(IpcMemoryKey memKey);extern void CreateAndInitSLockMemory(IPCKey key);extern void AttachSLockMemory(IPCKey key);#ifdef HAS_TEST_AND_SET#define NOLOCK			0#define SHAREDLOCK		1#define EXCLUSIVELOCK	2typedef enum _LockId_{	BUFMGRLOCKID,	LOCKLOCKID,	OIDGENLOCKID,	SHMEMLOCKID,	SHMEMINDEXLOCKID,	LOCKMGRLOCKID,	SINVALLOCKID,#ifdef STABLE_MEMORY_STORAGE	MMCACHELOCKID,#endif	PROCSTRUCTLOCKID,	FIRSTFREELOCKID} _LockId_;#define MAX_SPINS		FIRSTFREELOCKIDtypedef struct slock{	slock_t		locklock;	unsigned char flag;	short		nshlocks;	slock_t		shlock;	slock_t		exlock;	slock_t		comlock;	struct slock *next;} SLock;#else							/* HAS_TEST_AND_SET */typedef enum _LockId_{	SHMEMLOCKID,	SHMEMINDEXLOCKID,	BUFMGRLOCKID,	LOCKMGRLOCKID,	SINVALLOCKID,#ifdef STABLE_MEMORY_STORAGE	MMCACHELOCKID,#endif	PROCSTRUCTLOCKID,	OIDGENLOCKID,	FIRSTFREELOCKID} _LockId_;#define MAX_SPINS		FIRSTFREELOCKID#endif	 /* HAS_TEST_AND_SET *//* * the following are originally in ipci.h but the prototypes have circular * dependencies and most files include both ipci.h and ipc.h anyway, hence * combined. * *//* * Note: *		These must not hash to DefaultIPCKey or PrivateIPCKey. */#define SystemPortAddressGetIPCKey(address) \		(28597 * (address) + 17491)/* * these keys are originally numbered from 1 to 12 consecutively but not * all are used. The unused ones are removed.			- ay 4/95. */#define IPCKeyGetBufferMemoryKey(key) \		((key == PrivateIPCKey) ? key : 1 + (key))#define IPCKeyGetSIBufferMemoryBlock(key) \		((key == PrivateIPCKey) ? key : 7 + (key))#define IPCKeyGetSLockSharedMemoryKey(key) \		((key == PrivateIPCKey) ? key : 10 + (key))#define IPCKeyGetSpinLockSemaphoreKey(key) \		((key == PrivateIPCKey) ? key : 11 + (key))#define IPCKeyGetWaitIOSemaphoreKey(key) \		((key == PrivateIPCKey) ? key : 12 + (key))#define IPCKeyGetWaitCLSemaphoreKey(key) \		((key == PrivateIPCKey) ? key : 13 + (key))/* -------------------------- * NOTE: This macro must always give the highest numbered key as every backend * process forked off by the postmaster will be trying to acquire a semaphore * with a unique key value starting at key+14 and incrementing up.	Each * backend uses the current key value then increments it by one. * -------------------------- */#define IPCGetProcessSemaphoreInitKey(key) \		((key == PrivateIPCKey) ? key : 14 + (key))/* ipci.c */extern IPCKey SystemPortAddressCreateIPCKey(SystemPortAddress address);extern void CreateSharedMemoryAndSemaphores(IPCKey key, int maxBackends);extern void AttachSharedMemoryAndSemaphores(IPCKey key);#endif	 /* IPC_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -