목록unix (48)
K 개발자
공유 메모리 관련 함수 공유 메모리shared memory는 같은 메모리 공간을 두 개 이상의 프로세스가 공유하는 것이다. 같은 메모리 공간을 사용하므로 이를 통해 데이터를 주고받을 수 있다. 여러 프로세스가 메모리를 공유하고 있으므로 당연히 읽고 쓸 때 동기화가 필요하다. 공유 메모리를 동기화하지 않을 경우 데이터가 손실될 수 있다. 공유 메모리 생성 : shmget(2) #include #include #include int shmget(key_t key, size_t size, int shmflg); // key : IPC_PRIVATE 또는 ftok 함수로 생성한 키, size : 공유할 메모리의 크기, shmflg : 공유 메모리의 속성을 지정하는 플래그 공유 메모리 연결 : shmat(2) #..
메시지 큐 관련 함수 메시지 큐message queue는 파이프pipe와 유사하다. 단, 파이프는 스트림 기반으로 동작하고, 메시지 큐는 메시지(또는 패킷) 단위로 동작한다. 각 메시지의 최대 크기는 제한되어 있다. 각 메시지에는 메시지 유형message type이 있으므로, 수신 프로세스는 어떤 유형의 메시지를 받을 것인지 선택할 수 있다. 메시지 큐 생성 : msgget(2) #include int msgget(key_t key, int msgflg); // key : 메시지 큐를 구별하는 키, msgflg : 메시지 큐의 속성을 설정하는 플래그 메시지 전송 : msgsnd(2) #include int msgsnd(int msqid, const void *msgp, size_t msgsz, int m..
키와 식별자 시스템 V IPC에서 사용하는 키는 key_t 형으로 에 선언되어 있으며, 32비트 정수형이다. IPC를 사용하기 위해 새로운 IPC 객체를 생성할 때 키를 지정한다. 키가 다르면 서로 다른 객체가 생성된다. 각 IPC 방법의 객체 생성 함수에서 키를 받아 새로운 IPC 객체를 생성하고, 이를 식별하는 식별자를 리턴한다. 이 식별자를 사용해 통신할 수 있다. 키 생성하기 : ftok(3) #include key_t ftok(const char *path, int id); // path : 파일시스템에 이미 존재하는 임의의 파일의 경로명, id : 키 값을 생성할 때 지정하는 임의의 번호(1~255) IPC 공통 구조체 시스템 V IPC를 사용하기 위해 해당 IPC의 객체를 생성하면 IPC 공..
이름 있는 파이프 이름 있는 파이프named pipe는 글자 그대로 이름이 붙은 파이프로 모든 프로세스가 이 파이프명을 이용해 통신할 수 있다. FIFOFirst-In First-Out로 통신하려면 우선 FIFO 특수 파일을 생성하고 파일 입출력 함수를 사용하면 된다. 즉, 한 프로세스가 FIFO로 사용할 특수 파일을 생성하면, 이 파일의 이름을 알고 있는 다른 프로세스가 같은 FIFO를 이용해 통신을 수행할 수 있다. 명령으로 FIFO 파일 생성하기 FIFO·특수 파일 생성 : mknod 명령 mknod 파일명 p FIFO 파일 생성 : mkfifo 명령 /usr/bin/mkfifo [-m mode] path… 함수로 FIFO 파일 생성하기 특수 파일 생성 : mknod(2) #include int m..
간단한 파이프 생성 파이프는 두 프로세스 간에 통신을 할 수 있도록 인터페이스를 제공한다. 아무 수식어 없이 그냥 파이프라고 하면 일반적으로 이름 없는 파이프(익명 파이프)anonymous pipe를 의미한다. 이름 없는 파이프는 부모-자식 프로세스 간에 통신을 할 수 있게 해준다. 부모 프로세스에서 fork 함수를 사용해 자식 프로세스를 생성하고, 부모 프로세스와 자식 프로세스 간에 통신하는 것이다. 파이프 생성 : popen(3) #include FILE *popen(const char *command, const char *mode); // command : 쉘 명령, mode : "r" 또는 "w" 파이프 닫기 : pclose(3) #include int pclose(FILE *stream); /..
sigaction 구조체 sigaction 구조체는 에 정의되어 있으며, 구조체의 멤버는 시그널 처리를 위한 시그널 핸들러 주소, 시그널 핸들러가 수행하는 동안 블록될 시그널, 추가적인 기능을 설정할 수 있는 플래그로 구성되어 있다. struct sigaction { int sa_flags; union { void (*sa_handler)(); void (*sa_sigaction)(int, siginfo_t *, void *); } _funcptr; sigset_t sa_mask; }; sigaction 함수 sigaction 함수 : sigaction(2) #include int sigaction(int sig, const struct sigaction *restrict act, struct sigac..
시그널 집합의 개념 유닉스에서는 시그널 집합의 처리를 위해 sigset_t라는 구조체를 제공한다. sigset_t 구조체는 에 정의되어 있으며, sigset_t 구조체는 크기가 4인 unsigned int 배열을 사용한다. typedef struct { unsigned int __sigbits[4]; } sigset_t; 시그널 집합 처리 함수 시그널 집합 비우기 : sigemptyset(3) #include int sigemptyset(sigset_t *set); // set : 비우려는 시그널 집합의 주소 시그널 집합에 모든 시그널 설정 : sigfillset(3) #include int sigfillset(sigset_t *set); // set : 설정하려는 시그널 집합의 주소 시그널 집합에 시그..
시그널 핸들러 함수 시그널 핸들러 지정 : signal(3) #include void (*signal(int sig, void (*disp)(int)))(int); // sig : 시그널 핸들러로 처리하려는 시그널, disp : 시그널 핸들러의 함수명 시그널 핸들러 지정 : sigset(3) #include void (*sigset(int sig, void (*disp)(int)))(int); // sig : 시그널 핸들러로 처리하려는 시그널, disp : 시그널 핸들러의 함수명