Я пытаюсь разделить память о структурах на моем C сервере, получила следующий кодC Socket/Client вилка(), доля структура память
// 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];
Это то, что я делаю в моей вилке:
// 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);
Сбой серверной программы: каждый другой вход от клиентов больше не читается. Мне удалось заставить его работать с одной переменной struct (например, appello), но как только я начну использовать массивы (* appello [100]), я получаю эту проблему.
Вопрос: как я могу совместно использовать сегмент памяти этого массива структуры для каждого клиента, подключающегося к серверу?
Обратите внимание, что я пытаюсь понять университетское упражнение, и я должен решить его с разделяемой памятью и вилкой.
Почему вы не сериализуете вашу структуру данных на сокете (http://en.wikipedia.org/wiki/Serialization)? См. Также [этот ответ] (http://stackoverflow.com/a/28373401/841108) к соответствующему вопросу ... –