Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

167
Visualizações
Read Write Integer Array Into Shared Memory

The following is the READER-WRITER code for my shared memory.

Read Code-

int main(){
int shmid;
int *array;
int count = 5;
int i = 0;
key_t key = 12345;

shmid = shmget(key, count*sizeof(int), IPC_EXCL);

array = shmat(shmid, 0, SHM_RDONLY);

for(i=0; i<5; i++)
    {
        printf("\n%d---\n", array[i] );
    }

    printf("\nRead to memory succesful--\n");

    shmdt((void *) array);
    return 0;
}

Write Code-

int main()
{
int shmid;
int *array;
int count = 5;
int i = 0;
int SizeMem;
key_t key = 12345;

SizeMem = sizeof(*array)*count;

shmid = shmget(key, count*sizeof(int), IPC_CREAT);

array = (int *)shmat(shmid, 0, 0);

array = malloc(sizeof(int)*count);

for(i=0; i<5; i++)
{
    array[i] = i;
}

for(i=0; i<count; i++)
{
    printf("\n%d---\n", array[i]);
}

printf("\nWritting to memory succesful--\n");

shmdt((void *) array);

return 0;
}

After writing to the memory when I try to read, the output are garbage values. Can someone please explain what I have done wrong(The output shows all zeros) Thankyou

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

In the write section, you used malloc() after getting share memory address, so it will be overwritten. You should remove the malloc() line

In the read section, the for loop should look like this

printf("\n%d---\n", array[i] );
over 4 years ago · Santiago Trujillo Relatório

0

In write code your trying to attach the shared memory to array variable and also in next step u assigning the same to new location in user space (heap) by calling malloc.

So you are loosing the the location from where is the shared memory and writing into new array loacated by malloc.

array = (int *)shmat(shmid, 0, 0);
array = malloc(sizeof(int)*count);

Use different pointers if you want an array in user space also or remove the that malloc line.

Shared memory will allocate the memory specified by you while creating it. you cant allocate it later by other means.

over 4 years ago · Santiago Trujillo Relatório

0

Your malloc overwrites shmat's return value here.You are not writing to share memory but to the memory you just malloced.

array = (int *)shmat(shmid, 0, 0);

by delete this line.your code runs ok on my machine.

array = malloc(sizeof(int)*count);

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda