'세마포어'에 해당되는 글 1건
- 2010.01.22 세마포어
#include <sys/sem.h>
int semctl (int semid, int semnum, int cmd, ...);
int semget (key_t key, int nsems, int semflg);
int semop(int semid, struct sembuf *sops, size_t nsops);
==== semget ====
Mode bits:
IPC_CREATE : create entry if key does not exist
IPC_EXCL : key가 존재시 실패
IPC_NOWAIT : 요청이 wait해야하는 경우 실패함
Keys:
IPC_PRIVATE : private key.
control commands:
IPC_RMID : identifier를 삭제
IPC_SET : set option
IPC_STAT : get option
// semctl에서 사용하기위해서 application에서 직접 선언해야함 (standard header파일에는 존재하지 않음)
union semun {
int val;
struct semid_ds *buf;
unsigned short *array;
} arg;
/* Structure used for argument to `semop' to describe operations. */
struct sembuf
{
unsigned short int sem_num; /* semaphore number */
short int sem_op; /* semaphore operation */
short int sem_flg; /* operation flag */
};
/* Flags for `semop'. */
#define SEM_UNDO 0x1000 /* undo the operation on exit */
IPC_NOWAIT /* semaphore를 얻는데 실패해도 wait하지 않는다 */
/* Commands for `semctl'. */
#define GETPID 11 /* get sempid */
#define GETVAL 12 /* get semval */
#define GETALL 13 /* get all semval's */
#define GETNCNT 14 /* get semncnt */
#define GETZCNT 15 /* get semzcnt */
#define SETVAL 16 /* set semval */
#define SETALL 17 /* set all semval's */
/* Data structure describing a set of semaphores. */
struct semid_ds
{
struct ipc_perm sem_perm; /* operation permission struct */
__time_t sem_otime; /* last semop() time */
unsigned long int __unused1;
__time_t sem_ctime; /* last time changed by semctl() */
unsigned long int __unused2;
unsigned long int sem_nsems; /* number of semaphores in set */
unsigned long int __unused3;
unsigned long int __unused4;
};
structure ipc_perm
{
uid_t uid //Owner's user ID.
gid_t gid // Owner's group ID.
uid_t cuid // Creator's user ID.
gid_t cgid // Creator's group ID.
mode_t mode // Read/write permission.
}