I am studying shared memory in C language and I need to make a simple program so that a shared variable starts with a value and then the program creates a child process where the variable is going to be incremented by 2 and then the parent process multiplies the value by 4, I did not quite understand how to perform these operations, I saw some examples on the internet but none helped me, does anyone know what I'm doing wrong?
#define _XOPEN_SOURCE 22
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/shm.h>
int main(){
//o processo pai e o processo filho compartilhem uma variável simples (por exemplo, inteiro - valor 1)
int shrd;
//shrd = 1;
pid_t childpid;
int shm_id;
int *n;
shm_id = shmget(IPC_PRIVATE, 1024, IPC_CREAT);
if (shm_id < 0) {
printf("shmget error\n");
}
shrd = shmat(shm_id, 0, 0);
//o processo pai imprime o valor inicial dessa variável; em seguida, cria o processo filho e espera-o
printf("O valor da variavel compartilhada é %i\n",shrd);
childpid = fork();
printf("o childpid eh %i\n",childpid);
//o processo filho acessa esta variável, realiza uma operação (por exemplo, adição - valor 2, totalizando 3), modificando o valor; em seguida, o processo filho termina
if (childpid == 0){
shrd+= 2;
}
else{
//o processo pai realiza uma outra operação (por exemplo, multiplicação - valor 4, totalizando 12), modificando novamente o valor, e imprime novamente a variável
wait();
shrd *= 4;
printf("O valor da variavel compartilhada eh %i\n",shrd);
}
return 0;
}