[c++] 프로세스 간 통신 방법
네트워크 소켓을 이용한 통신
네트워크 소켓을 활용하면 다른 프로세스나 컴퓨터와 통신할 수 있습니다. 일반적으로 TCP 또는 UDP 소켓을 생성하고, 데이터를 교환하는 데 사용됩니다. C++에서 네트워크 소켓을 사용하기 위해서는 socket
, bind
, connect
, send
, recv
등을 활용합니다.
#include <iostream>
#include <sys/socket.h>
#include <netinet/in.h>
int main() {
int serverSocket = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(54000);
serverAddr.sin_addr.s_addr = INADDR_ANY;
bind(serverSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr));
listen(serverSocket, 5);
int clientSocket = accept(serverSocket, nullptr, nullptr);
// 데이터 송수신
char buff[1024];
recv(clientSocket, buff, sizeof(buff), 0);
send(clientSocket, "Received", sizeof("Received"), 0);
// 소켓 닫기
close(clientSocket);
close(serverSocket);
return 0;
}
공유 메모리를 이용한 통신
공유 메모리는 프로세스 간에 메모리 영역을 공유하여 데이터를 교환하는 방법입니다. C++에서는 shmget
, shmat
, shmdt
, shmctl
함수를 사용하여 공유 메모리를 생성하고 연결할 수 있습니다.
#include <iostream>
#include <sys/ipc.h>
#include <sys/shm.h>
int main() {
key_t key = ftok("shmfile",65);
int shmid = shmget(key, 1024, 0666|IPC_CREAT);
char *str = (char*) shmat(shmid,(void*)0,0);
// 공유 메모리에 데이터 쓰기
strcpy(str, "Hello");
// 공유 메모리에서 데이터 읽기
std::cout << "Data read from memory: " << str << std::endl;
// 공유 메모리 해제
shmdt(str);
shmctl(shmid, IPC_RMID, NULL);
return 0;
}
이처럼 네트워크 소켓과 공유 메모리는 C++에서 프로세스 간 통신을 위한 강력한 도구입니다. 자세한 내용은 Beej’s Guide to Network Programming와 Linux manual pages를 참고하시기 바랍니다.