Je crée donc un fichier Load.c, qui va charger un groupe d'étudiants dans la mémoire partagée. Les étudiants sont stockés dans une struct qui ressemble à ceci:Charger la mémoire partagée dans C
struct StudentInfo{
char fName[20];
char lName[20];
char telNumber[15];
char whoModified[10];
};
Quoi qu'il en soit, je dois charger cette mémoire partagée. On nous a donné quelques exemples de code et nous lisons le code à partir d'un fichier de données qui ressemblera à ceci:
John Blakeman
111223333
560 Southbrook Dr. Lexington, KY 40522
8591112222
Paul S Blair
111223344
3197 Trinity Rd. Lexington, KY 40533
etc....
Voici mon idée du code: (header.h vient informations struct/et sémaphores mang .. ..I'm incertain de ce qu'il doit être, en ce moment il est étiqueté comme 5)
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/sem.h>
#include "header.h"
main()
{
int i,id;
struct StudentInfo *infoptr;
int sema_set;
id = shmget(KEY, SEGSIZE,IPC_CREAT|0666); /* get shared memory to store data */
if (id < 0){
perror("create: shmget failed");
exit(1);
}
infoptr=(struct StudentInfo *)shmat(id,0,0); /* attach the shared memory segment to the process's address space */
if(infoptr <= (struct StudentInfo *) (0)) {
perror("create: semget failed");
exit(2);
}
/* store data in shared memory segment */
//here's where I need help
C'est à peu près aussi loin que je suis arrivé. maintenant je sais que je peux stocker des données en utilisant strcpy (infoptr-> fName, "Joe"); (par exemple) mais j'ai besoin de lire un nombre X de noms? Comment pourrais-je les stocker? En utilisant une sorte de vecteur push/pop de structures? à quoi cela ressemblerait-il?
Et puis-je ajuster les sémaphores en fonction du nombre d'entrées que je suppose? Je suis un peu confus comment ajuster mon nombre de sémaphores.
Oh BTW est ici mon fichier d'en-tête juste au cas où (SSN sont faux évidemment)
/* header.h */
#define KEY ((key_t)(10101)) /* Change to Last 5 digits of SSN */
#define SEGSIZE sizeof(struct StudentInfo)
#define NUM_SEMAPHS 5
#define SEMA_KEY ((key_t) (1010)) /* Last 4 digits of SSN */
struct StudentInfo{
char fName[20];
char lName[20];
char telNumber[15];
char whoModified[10];
};
void Wait(int semaph, int n);
void Signal(int semaph, int n);
int GetSemaphs(key_t k, int n);
Hm, je ne comprends pas quels sont vos objectifs. Pourriez-vous nous donner peut-être une idée de la mission? –
duplication possible de [C base de données de mémoire partagée] (http://stackoverflow.com/questions/4048516/c-shared-memory-database) –
^^ C'est à partir de cette assignation oui, mais c'est un fichier spécifique. Je vais accéder à la mémoire partagée à partir d'autres programmes (print.c et query.c) Dans ce je vais juste les charger dans la mémoire partagée. Le principal problème est que je n'ai aucune idée de la durée du fichier de données. –