Network Programming/프로세스 사이의 통신(3)
-
3. 공유 메모리
공유 메모리는 프로세스와 프로세스 사이에 공유할 수 있는 메모리 공간을 지정하는 방법. 공유 메모리 사용 과정 : 공유 메모리 객체를 만드는 과정 공유 메모리의 객체의 크기를 설정하는 과정 공유 메모리 객체를 프로세스 메모리 영역과 맵핑하는 과정 공유 메모리 객체 생성 int shm_open(const char *name, int oflag, mode_t mode); name : 공유 메모리 객체를 지시하기 위한 이름 oflag : int 형 비트 마스크로 open되는 공유 메모리의 특성 설정(fcntl.h에서 정의) mode : 권한 정보를 설정하기 위한 데이터형(sys/stat.h에서 정의) shm_open함수는 특정 이름을 갖는 공유 메모리 객체를 생성한 후에 그 객체에 접근할 수 있는 파일 디스크..
2022.07.04 -
2. Pipe
두 프로세스 간 통신을 위해서는 파이프를 생성해야 함. 파이프는 프로세스에 속하는 자원이 아니고 소켓과 마찬가지로 운영체제에 속하는 자원이므로 fork함수의 호출에 의한 복사 대상이 아님. 파이프를 프로세스 사이의 통신을 위해 사용하려면 fork함수와 함께 사용해야 함. 부모 프로세스에서 파이프를 생성하고 fork를 통해 자식 프로세스를 생성하면 파이프에 접근할 수 있는 파일 디스크립터들이 복사됨. 따라서 부모 프로세스와 자식 프로세스 사이의 데이터 교환이 가능해지며 자식 프로세스들끼리도 파이프를 이용하여 통신하는 것이 가능함. int pipe(inf filedes[2]); filedes[0] : 파이프로부터 데이터를 수신하는데 사용되는 파일 디스크립터가 저장됨. 즉 파이프의 출구. filedes[1] ..
2022.07.04 -
1.Signal
Socket API : 네트워크 기술로 연결되어 있는 서로 다른 호스트 상에 존재하는 두 프로세스 사이의 통신을 가능하게 함. 운영체제는 다양한 사건에 대하여 시그널 번호를 정의하고 해당 사건이 발생했을 때 프로세스에게 시그널을 전달. 시그널이 프로세스로 배달되면 프로세스는 해당 시그널을 위하여 정의된 핸들러 루틴을 실행. 에 시그널이 양의 정수 매크로로 정의되어 있음. kill -l 명령어로 확인 가능. sigaction 함수 int sigaction(int sig, const struct sigaction * act, struct sigaction * oldact ); sigaction 함수는 시그널 핸들러 정보를 관리하기 위해 sigaction이라는 구조체를 사용함. struct sigaction ..
2022.07.04