【发布时间】:2013-12-09 15:42:55
【问题描述】:
我想在客户端-服务器程序之间共享变量。我有服务器和 2 个客户端。我用 shmget 制作了 shm,但我无法在客户端中读取变量
服务器:
if ((nMemID=shmget(kluc, sizeof(udaje[2]), IPC_CREAT|0777))==-1)
{
perror("Nepodarilo sa vytvorit segment zdielanej pamate\n");
exit(-100);
}
if ((shared =(udaje *)shmat(nMemID, NULL, 0))==NULL )
{
fprintf(stderr,"Nepodarilo sa pripojit na rad sprav\n");
exit(-1);
}
shared->hlavnaNadrz=50000;
shared->nadrz1=1200;
客户:
if ((zdielanie =(udaje *)shmat(nMemID, NULL, 0))==NULL )
{
fprintf(stderr,"Nepodarilo sa pripojit na rad sprav\n");
exit(-1);
}
data=zdielanie->hlavnaNadrz;
【问题讨论】:
-
无法阅读或无法附加?
-
无法从 sharedMemor 中读取。但在 ipcs 我创建了共享内存 0x0000162e 62619660 fitz 777 48 1
-
如果您的客户端和服务器程序将通过网络进行通信,那么在进程之间共享内存是行不通的。由于内存是在您的服务器上分配的,而不是在您的客户端上。
-
运行这段代码会发生什么?描述任何关于环境的特别之处。另外,客户端和服务器都在同一台主机上,对吧?无法跨网络共享内存。
-
注意,shmat() 在失败时返回 -1 而不是 NULL。
标签: c++ c linux shared-memory shared