[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 ProgrammingLinux manual pages를 참고하시기 바랍니다.