在C linux中服务器和客户端之间的共享内存

Shared Memory in C linux between server and Client

本文关键字:之间 共享 内存 客户端 linux 服务器      更新时间:2023-10-16

我想在客户端-服务器程序之间共享变量。我有服务器和2个客户端。我用shmget做了shm,但我不能在客户端中处理变量

服务器:

if ((nMemID=shmget(kluc, sizeof(udaje[2]), IPC_CREAT|0777))==-1)
{
    perror("Nepodarilo sa vytvorit segment zdielanej pamaten");
    exit(-100);
}
if ((shared =(udaje *)shmat(nMemID, NULL, 0))==NULL )
{
    fprintf(stderr,"Nepodarilo sa pripojit na rad spravn");
    exit(-1);
}
shared->hlavnaNadrz=50000;
shared->nadrz1=1200;

客户:

 if ((zdielanie =(udaje *)shmat(nMemID, NULL, 0))==NULL )
{
    fprintf(stderr,"Nepodarilo sa pripojit na rad spravn");
    exit(-1);
}
data=zdielanie->hlavnaNadrz;

读取循环中的数据:

    if (shmctl(shmid, SHM_LOCK, NULL) == -1)
    {
        printf ("Unable to lock the shared storage: Reason %sn", strerror(errno));
        break;
    }
    ShrStruct = (struct SharedStruct *)shm;
    if (strlen(ShrStruct->Name) && ShrStruct->EmpID != 0)
    {
        printf("Data Received : Name --> %s || Employee ID --> %ldn", ShrStruct->Name, ShrStruct->EmpID);
        memset(shm, '', sizeof(struct SharedStruct));
    }
    if (shmctl(shmid, SHM_UNLOCK, NULL) == -1)
    {
        printf ("Unable to unlock the shared storage: Reason %sn", strerror(errno));
        break;
    }