같은 시스템내에서 process가 정보를 공유할 수 있게 해준다.
struct ipc_perm{
uid_t uid; //Owner
gid_t gid;
uid_t cuid; //Creator
gid_t cgid;
mode_t mode;
};
Permissoin | bit | Permissoin | bit |
---|---|---|---|
user-read | 0400 | user-write | 0200 |
group-read | 0040 | group-wrtie | 0020 |
other-read | 0004 | other-write | 0002 |
#include <sys/ipc.h>
key_t ftok(const char *path,int id);
/* 성공시 key를, 실패시 -1을 반환한다. */
#include <sys/msg.h>
#include <sys/sem.h>
#include <sys/shm.h>
int mstget(key_t key, int permflags);
int semget(key_t key, int nsems, int permflags);
int shmget(key_t key, size_t size, int permflags);
Key 생성 방법
perflags
msq와 shared memory는 read, write만 이용하고, semaphore는 read, alter만 이용한다.
numeric | message queue | semaphore | shared memory | description |
---|---|---|---|---|
0400 | MSG_R | SEM_R | SHM_R | user-read |
0200 | MSG_W | SEM_A | SHM_W | user-write |
0040 | MSG_R >> 3 | SEM_R >> 3 | SHM_R >> 3 | group-read |
0020 | MSG_W >> 3 | SEM_A >> 3 | SHM_R >> 3 | group-write |
#include <sys/msg.h>
#include <sys/sem.h>
#include <sys/shm.h>
int mstctl(int msqid, int command, struct msqid_ds *buf);
int semctl(int semid, int semnum, int command[,union semun arg]);
int shmctl(int shmid, int command, struct shmid_ds *buf);
/* 성공시 0, 실패시 -1을 반환한다. */
ipcs [-qms][-a | -bcopt]
ipcrm [-q msgid | -Q msgkey | -s semid | -S semkey |
-m shmid | -M shmkey | ...
$ ipcs
------ Shared Memory Segments ------
key shmid owner perms bytes naatch status
0x00000000 25198594 root 666 247275 3
------ Semaphore Arrays ------
key semid owner perms nsems status
0x00000000 65537 root 666 4
$ ipcrm -s 65537
$ ipcrm -m 25198594