[Linux]IPC1

공부기록·2023년 12월 7일
0
post-thumbnail

🔊 IPC

같은 시스템내에서 process가 정보를 공유할 수 있게 해준다.

  • message queue
    • msgctl, msgget, msgrcv, magsnd
  • semaphore
    • semctl, semget, semop
  • shared memory
    • shmctl, shmget, shmat, shmdt

  • Key
    • IPC의 외부 이름으로 IPC가 생성될 때 필요한 요소이며 중복은 없어야한다.
  • Identifier
    • IPC의 내부 이름이며 음수가 아닌 수이다. get함수의 리턴값이며 file discriptor와 같은 역할을 한다. fd와의 차이점은 이 값은 유일하다는 것이다.

🔊 Permission 구조

struct ipc_perm{
	uid_t uid; //Owner
    gid_t gid;
    uid_t cuid; //Creator
    gid_t cgid;
    mode_t mode;
};
PermissoinbitPermissoinbit
user-read0400user-write0200
group-read0040group-wrtie0020
other-read0004other-write0002
  • umask는 IPC에서는 사용하지않는다.
  • ---ctl를 이용하면 uid, gid, mode의 변경이 가능하다.
    • creator와 superuser만 가능

🖋️ tfok( )

  • pahe와 id를 이용하여 key값을 얻는 함수이다.
#include <sys/ipc.h>

key_t ftok(const char *path,int id);

/* 성공시 key를, 실패시 -1을 반환한다. */

🔊 IPC get

  • key를 넣어 ID값을 생성한다.
#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 생성 방법

  • SYSTEM에서 설정한 것 사용(IPC_PRIVATE-자신도 모른다.)
  • 임의로 설정
  • ftok()를 이용하여 생성

perflags

  • IPC_CREAT
  • IPC_EXCL

msq와 shared memory는 read, write만 이용하고, semaphore는 read, alter만 이용한다.

numericmessage queuesemaphoreshared memorydescription
0400MSG_RSEM_RSHM_Ruser-read
0200MSG_WSEM_ASHM_Wuser-write
0040MSG_R >> 3SEM_R >> 3SHM_R >> 3group-read
0020MSG_W >> 3SEM_A >> 3SHM_R >> 3group-write

🔊 IPC ctl

#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을 반환한다. */
  • command
    • IPC_STAT : 저장된 정보를 반환한다.
    • IPC_SET : owner, group, mode를 변경할 때 이용한다.
    • IPC_RMID : IPC를 시스템 상에서 제거한다.

Shell

  • option
    • -q, -m, -s : message queue, shared memory, semaphore
    • -a : 긴 format을 이용하여 정보 출력
    • -bcopt : 출력가능한 정보
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

0개의 댓글

관련 채용 정보