У меня есть 2 программы писатель и читатель. Предполагается, что записывающее устройство создает разделяемую память, а затем сохраняет массив структур в этом фрагменте памяти ... считывающее устройство должно использовать этот фрагмент памяти и иметь возможность выводить то, что записано в памяти записывающим устройством. Я очень стараюсь вывести больше, чем просто первую часть массива, так что я даже не уверен, правильно ли массив сохраняется в общую память, поэтому я сказал, что выложу свой код здесь, и, возможно, кто-то может мне помочь вне ...
ПИСАТЕЛЬ:
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <assert.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/shm.h>
#include <unistd.h>
#include "header.h"
int main()
{
key_t key = 1234;
int shmid;
int i = 0;
int p;
struct companyInfo * pdata[4];
for (i = 0; i < 5; i++)
{
pdata[i] = malloc(sizeof(struct companyInfo));
p = sizeof(struct companyInfo);
//printf("size: %d\n", p);
//printf("look: %x\n", pdata[i]);
}
int sizeOfCompanyInfo = sizeof(struct companyInfo);
int sizeMem = sizeOfCompanyInfo*5;
shmid = shmget(key, sizeMem, 0644 | IPC_CREAT);
if(shmid == -1)
{
perror("shmget");
exit(1);
}
*pdata = (struct companyInfo*) shmat(shmid, (void*) 0, 0);
if(*pdata == (struct companyInfo*) -1)
{
perror("schmat error");
exit(1);
}
strcpy(pdata[0]->companyName,"AIB");
pdata[0]->sharePrice = 11.2;
strcpy(pdata[1]->companyName,"BOI");
pdata[1]->sharePrice = 10.2;
strcpy(pdata[2]->companyName,"TSB");
pdata[2]->sharePrice = 9.2;
printf("name is %s and %f \n",pdata[0]->companyName,pdata[0]->sharePrice);
printf("name is %s and %f \n",pdata[1]->companyName,pdata[1]->sharePrice);
printf("name is %s and %f \n",pdata[2]->companyName,pdata[2]->sharePrice);
exit(0);
}
ЧИТАТЕЛЬ:
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <assert.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/shm.h>
#include <unistd.h>
#include "header.h"
int main()
{
key_t key = 1234;
int shmid;
int sizeMem = 100;
struct companyInfo * pdata[4];
//int sizeOfCompanyInfo = sizeof(pdata);
//printf("Size: %d\n", sizeOfCompanyInfo);
shmid = shmget(key, 0, 0);
if(shmid == -1)
{
perror("shmget");
exit(1);
}
*pdata = (struct companyInfo*) shmat(shmid,(void*)0,0);
if(*pdata==(struct companyInfo*) -1)
{
perror("shmat error");
exit(1);
}
printf("The id is %d\n",shmid);
printf("Bank is %s and %f . \n",pdata[0]->companyName,pdata[0]->sharePrice);
printf("Bank is %s and %d . \n",pdata[1]->companyName,pdata[1]->sharePrice);
printf("Bank is %s and %d . \n",pdata[2]->companyName,pdata[2]->sharePrice);
exit(0);
}
HEADER:
struct companyInfo
{
double sharePrice;
char companyName[100];
};