程式語言 - GNU - C/C++ - Share Memory



參考資訊:
https://stackoverflow.com/questions/26500476/shmget-for-ipc-in-linux

server.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/shm.h>
#include <sys/time.h>
#include <unistd.h>

int main(int argc, char **argv)
{
    int id = 0;
    char *p = NULL;

    id = shmget(9999, 1024, IPC_CREAT | 0666);
    p = shmat(id, NULL, 0);
    strcpy(p, "ipc test\n");
    usleep(1000000);
    shmdt(p);
    printf("server:%d\n", shmctl(id, IPC_RMID, 0));
    return 0;
}

client.c

#include <stdio.h>
#include <sys/shm.h>

int main(int argc, char **argv)
{
    int id = 0;
    char *p = NULL;

    id = shmget(9999, 1024, IPC_CREAT | 0666);
    p = shmat(id, NULL, 0);
    for (; *p; p++) {
        printf("%c", *p);
    }
    shmdt(p);
    printf("client:%d\n", shmctl(id, IPC_RMID, 0));
    return 0;
}

編譯、執行

$ gcc server.c -o server
$ ./server & ./client 
    ipc test
    client:0
    server:0