poniedziałek, 17 lutego 2020

Shared memory (C++ Linux)

#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <stdio.h>
#include <sys/shm.h>

#define m_size 10
#define m_mem 10000
using namespace std;



 const string capitals[m_size]={"Warsaw","Berlin","Moscow","Paris","Athens","Kiev",
"Prague","Roma","Lisbon","Amsterdam"};
 const int segments[m_size]={0x1500,0x2500,0x3500,0x4500,0x5500,0x6500,0x7500,
0x8500,0x9500,0x4900};
 const int new_segments[m_size]={0x100000,0x200000,0x300000,0x4000000,0x5000000,
 0x6000000,0x7000000,0x8000000,0x9000000,0x783838};
 int value_Size[10];
 int value_Segm[10];
int main(int argc, char **argv)
{
int i;
char **mem=new char *[m_size];
for(i=0;i<m_size;i++)
mem[i]=new char[m_mem];

struct shmid_ds* mem_Contr=new shmid_ds[m_size];
for(i=0;i<m_size;i++)
{
value_Segm[i]=shmget(IPC_PRIVATE,segments[i],IPC_CREAT | IPC_EXCL | S_IRUSR | S_IWUSR);
mem[i]=(char*)shmat(value_Segm[i],0,0);
shmctl(value_Segm[i],IPC_STAT,&mem_Contr[i]);
value_Size[i]=mem_Contr[i].shm_segsz;
cout<<"Size memory: "<<value_Size[i]<<endl;
sprintf(mem[i],capitals[i].c_str());
shmdt(mem[i]);
mem[i]=(char*)shmat(value_Segm[i],(void*)new_segments[i],0);
printf("New memory: %p    %s\n",mem[i],mem[i]);
shmdt(mem[i]);
shmctl(value_Segm[i],IPC_RMID,0);
}
for(i=0;i<m_size;i++)
delete [] mem[i];
delete mem;
delete mem_Contr;




return 0;
}

Brak komentarzy:

Prześlij komentarz