【发布时间】:2015-02-08 18:32:49
【问题描述】:
我正在尝试在我的 C 服务器上共享结构的内存,得到以下代码
// Before the main
struct Esami {
char nome[20];
char cognome[20];
char matricola[20];
char voto[20];
};
struct Appelli {
int stato;
char dipartimento[20];
char cdl[20];
char nomeEsame[20];
char data[20];
struct Esami esame[10];
int numEsamiRegistrati;
} *appello[100];
这就是我在 fork 中所做的:
// After creating socket, bind(), listen() and so on..
if ((pid = fork()) == 0) {
shmid = shmget(2009, sizeof(appello), 0666 | IPC_CREAT);
*appello = shmat(shmid, 0, 0);
close (listenfd); // Closes the parent socket
// Operations on this struct (like the one I explained below)
exit(0);
}
我尝试使用箭头运算符访问结构的字段,但是程序可能会出现内存错误,所以如果我填充一个字段并尝试例如
printf("Dipartimento: %s", appello[0]-> dipartimento);
服务器程序崩溃:不再读取来自客户端的所有其他输入。我设法让它与单个结构变量(如 *appello)一起工作,但是一旦我开始使用数组(*appello[100]),我就会遇到这个问题。
问题是:如何将这个结构数组的内存段共享给每个连接到服务器的客户端?
请注意,我正在尝试理解一个大学练习,我必须使用共享内存和 fork 来解决它。
【问题讨论】:
-
你为什么不在socket上serialize你的数据结构呢?另请参阅this answer 相关问题...
标签: c sockets struct fork shared-memory