epoc32/include/stdapis/sys/sem.h
author William Roberts <williamr@symbian.org>
Tue, 16 Mar 2010 16:12:26 +0000
branchSymbian2
changeset 2 2fe1408b6811
parent 0 061f57f2323e
child 4 837f303aceeb
permissions -rw-r--r--
Final list of Symbian^2 public API header files
     1 /* $FreeBSD: src/sys/sys/sem.h,v 1.29 2004/11/17 13:12:06 rwatson Exp $ */
     2 /*	$NetBSD: sem.h,v 1.5 1994/06/29 06:45:15 cgd Exp $	*/
     3 
     4 /*
     5  *© Portions copyright (c) 2006 Nokia Corporation.  All rights reserved.
     6  *© Portions copyright (c) 2006 Symbian Software Ltd. All rights reserved.
     7  * SVID compatible sem.h file
     8  *
     9  * Author:  Daniel Boulet
    10  */
    11 
    12 #ifndef _SYS_SEM_H_
    13 #define _SYS_SEM_H_
    14 
    15 #include <sys/ipc.h>
    16 
    17 
    18 struct sem {
    19 	u_short	semval;		/* semaphore value */
    20 	pid_t	sempid;		/* process ID of last operation */
    21 	u_short	semncnt;	/* number of processes waiting for semval
    22                            to become greater than current value */
    23 	u_short	semzcnt;	/* number of processes waiting for semval
    24                            to become 0 */
    25     };
    26 
    27 struct semid_ds {
    28 	struct ipc_perm	sem_perm;	/* operation permission struct */
    29 	struct sem	*sem_base;	/* pointer to first semaphore in set */
    30 	unsigned short	sem_nsems;	/* number of sems in set */
    31 	time_t		sem_otime;	/* last operation time */
    32 	long		sem_pad1;	/* SVABI/386 says I need this here */
    33 	time_t		sem_ctime;	/* last change time */
    34     					/* Times measured in secs since */
    35     					/* 00:00:00 GMT, Jan. 1, 1970 */
    36 	long		sem_pad2;	/* SVABI/386 says I need this here */
    37 	long		sem_pad3[4];	/* SVABI/386 says I need this here */
    38 };
    39 
    40 /*
    41  * semop's sops parameter structure
    42  */
    43 struct sembuf {
    44 	unsigned short	sem_num;	/* semaphore # */
    45 	short		sem_op;		/* semaphore operation */
    46 	short		sem_flg;	/* operation flags */
    47 };
    48 #define SEM_UNDO	010000
    49 
    50 /*
    51  * semctl's arg parameter structure
    52  */
    53 union semun {
    54 	int		val;		/* value for SETVAL */
    55 	struct		semid_ds *buf;	/* buffer for IPC_STAT & IPC_SET */
    56 	unsigned short	*array;		/* array for GETALL & SETALL */
    57 };
    58 
    59 /*
    60  * commands for semctl
    61  */
    62 #define GETNCNT	3	/* Return the value of semncnt {READ} */
    63 #define GETPID	4	/* Return the value of sempid {READ} */
    64 #define GETVAL	5	/* Return the value of semval {READ} */
    65 #define GETALL	6	/* Return semvals into arg.array {READ} */
    66 #define GETZCNT	7	/* Return the value of semzcnt {READ} */
    67 #define SETVAL	8	/* Set the value of semval to arg.val {ALTER} */
    68 #define SETALL	9	/* Set semvals from arg.array {ALTER} */
    69 #define SEM_STAT 10	/* Like IPC_STAT but treats semid as sema-index */
    70 #define SEM_INFO 11	/* Like IPC_INFO but treats semid as sema-index */
    71 
    72 /*
    73  * Permissions
    74  */
    75 #define SEM_A		IPC_W	/* alter permission */
    76 #define SEM_R		IPC_R	/* read permission */
    77 
    78 #ifdef _KERNEL
    79 
    80 /*
    81  * semaphore info struct
    82  */
    83 struct seminfo {
    84 	int	semmap,		/* # of entries in semaphore map */
    85 		semmni,		/* # of semaphore identifiers */
    86 		semmns,		/* # of semaphores in system */
    87 		semmnu,		/* # of undo structures in system */
    88 		semmsl,		/* max # of semaphores per id */
    89 		semopm,		/* max # of operations per semop call */
    90 		semume,		/* max # of undo entries per process */
    91 		semusz,		/* size in bytes of undo structure */
    92 		semvmx,		/* semaphore maximum value */
    93 		semaem;		/* adjust on exit max value */
    94 };
    95 extern struct seminfo	seminfo;
    96 
    97 /*
    98  * Kernel wrapper for the user-level structure
    99  */
   100 struct semid_kernel {
   101 	struct	semid_ds u;
   102 	struct	label *label;	/* MAC framework label */
   103 };
   104 
   105 /* internal "mode" bits */
   106 #define	SEM_ALLOC	01000	/* semaphore is allocated */
   107 #define	SEM_DEST	02000	/* semaphore will be destroyed on last detach */
   108 
   109 /*
   110  * Process sem_undo vectors at proc exit.
   111  */
   112 void	semexit(struct proc *p);
   113 #endif /* _KERNEL */
   114 
   115 #ifndef _KERNEL
   116 #include <sys/cdefs.h>
   117 #include <sys/_types.h>
   118 
   119 #ifndef _SIZE_T_DECLARED
   120 typedef __size_t        size_t;
   121 #define _SIZE_T_DECLARED
   122 #endif
   123 
   124 #ifndef _PID_T_DECLARED
   125 typedef __pid_t         pid_t;
   126 #define _PID_T_DECLARED
   127 #endif
   128 
   129 // FUNCTION PROTOTYPES
   130 
   131 
   132 // FORWARD DECLARATIONS
   133 
   134 
   135 // CLASS/STRUCT/FUNCTION DECLARATION
   136 
   137 __BEGIN_DECLS
   138 
   139 /*
   140 * Get semaphore identifier using the IPC key generated by ftok.
   141 */
   142 
   143 IMPORT_C int semget(key_t key, int nsems, int semflg);
   144 
   145 
   146 /*
   147 * Perform atomically a user-defined array of semaphore operations on the set of 
   148 * semaphores associated with the semaphore identifier specified by the argument semid.
   149 */
   150 
   151 IMPORT_C int semop(int semid, struct sembuf *sops, unsigned nsops);
   152 
   153 
   154 /*
   155 * Provides a variety of semaphore control operations as specified by cmd.
   156 */
   157 IMPORT_C int semctl(int semid, int semnum, int cmd, ...);
   158 
   159 
   160 __END_DECLS
   161 #endif // #ifndef _KERNEL
   162 
   163 #endif // _SYS_SEM_H_
   164 
   165 //  End of File