I just wanted to know where the shared memory is on a Linux system? Is it in physical memory or virtual memory?
I know about the field for sending virtual memory of a process, they differ from process to process, and processes do not see each other in memory, but we can transfer data between processes using IPC. To implement a simple scenario, I just created a simple shared memory program and try to print the shared memory address and return the value from the shmat function, however both processes have a different address but the same value.
Here is the recording program.
write.c
#include <sys/ipc.h> #include <sys/shm.h> #include <stdio.h> int main() { key_t key=1235; int shm_id; void *shm; int *ptr = 83838; shm_id = shmget(key,10,IPC_CREAT | 0666); shm = shmat(shm_id,NULL,NULL); sprintf(shm,"%d",ptr); printf("Address is %p, Value is %p \n", (void *)shm, (void *)&ptr); printf("Shm value is %d \n", *(int *)shm); return; }
Here is a program for readers.
read.c
#include <sys/ipc.h> #include <sys/shm.h> #include <stdio.h> #include <stdlib.h> int main() { key_t key=1235; int shm_id; void *shm; int *p = (int *)malloc(sizeof(int)); shm_id = shmget(key,10,NULL); shm = shmat(shm_id,NULL,NULL); if(shm == NULL) { printf("error"); } sscanf(shm,"%d",p); printf("Address is %p %p %p %d\n",(void *)shm, (void *)p, (void *)&p, *p); printf("Shared value is %d \n", *(int *)shm); return 0; }
Would it be nice if someone could explain how processes see the same value despite different addresses?
This question comes from the C pointer void void using shared memory .
Thanks.
c linux shared-memory memory
skanzariya
source share