Итак, я делаю файл Load.c, который в основном загружает группу «студентов» в общую память.
Студенты хранятся в структуре, которая выглядит следующим образом:
struct StudentInfo{
char fName[20];
char lName[20];
char telNumber[15];
char whoModified[10];
};
В любом случае, мне нужно загрузить это в общую память. Нам дали пример кода, и мы читаем код из файла данных, который будет выглядеть следующим образом:
John Blakeman
111223333
560 Southbrook Dr. Lexington, KY 40522
8591112222
Paul S Blair
111223344
3197 Trinity Rd. Lexington, KY 40533
etc....
Вот моя идея для кода: (header.h просто имеет структуру info / и счетчик семафоров .... Я не уверен, каким он должен быть, сейчас он помечен как 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
Это примерно столько, сколько я получил. теперь я знаю, что могу хранить данные, используя strcpy (infoptr-> fName, "Joe"); (например)
но мне нужно прочитать число имен X? Как мне их хранить? Используя какой-то вектор push / pop структур? как бы это выглядело?
И настраиваю ли я семафоры в зависимости от того, сколько "записей" я предполагаю? Я немного запутался, как настроить количество семафоров.
О, кстати, вот мой заголовочный файл на всякий случай (SSN явно фальшивый)
/* 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);