Description: Following c language program is a Linux shared
memory example. This is useful in understanding Linux IPC (Inter process
communication). The command/function that is used in this code and can be used in doing shared memory programming is shmget()
#include<stdio.h>
#include<sys/shm.h>
#include<sys/stat.h>
#include<unistd.h>
int count=1;
int main(){
int segment_id_1,segment_id_2;
char *shared_memory_1,*shared_memory_2;
struct shmid_ds shmbuffer;
int segment_size;
const int shared_segment_size=0x6400;
/*Allocate a shared memory
segment*/
segment_id_1=shmget (IPC_PRIVATE,shared_segment_size,IPC_CREAT| IPC_EXCL|S_IRUSR|S_IWUSR);
segment_id_2=shmget (IPC_PRIVATE,shared_segment_size,IPC_CREAT| IPC_EXCL|S_IRUSR|S_IWUSR);
/*Attach the shared memory
segment*/
shared_memory_1=(char*)shmat(segment_id_1,0,0);
shared_memory_2=(char*)shmat(segment_id_2,0,0);
pid_t pid;
pid=fork();
if(pid>0){
/*Write a string to the
shared memory segment*/
sprintf(shared_memory_1,"Hello Child.");
sprintf(shared_memory_1,"Hello Child.");
wait(NULL);
/*Print out the string from
shared memory*/
printf("Message for Parent: %s\n",shared_memory_2);
printf("Message for Parent: %s\n",shared_memory_2);
pid_t pid;
pid=fork();
if(pid>0){
wait(NULL);
printf("Message for Parent: %s\n",shared_memory_2);
pid_t pid;
pid=fork();
if(pid>0){
wait(NULL);
printf("Message for Parent: %s\n",shared_memory_2);
}
else if(pid==0){
/*Print out the string from
shared memory*/
printf("Message for Child#3: %s\n",shared_memory_1);
/*Write a string to the
shared memory segment*/
sprintf(shared_memory_2,"Hello Parent from
Chid#3");
}
}
else if(pid==0){
/*Print out the string from
shared memory*/
printf("Message for Child#2: %s\n",shared_memory_1);
/*Write a string to the
shared memory segment*/
sprintf(shared_memory_2,"Hello Parent from
Child#2");
}
}
else if(pid==0){
/*Print out the string from
shared memory*/
printf("Message for Child#1: %s\n",shared_memory_1);
/*Write a string to the
shared memory segment*/
sprintf(shared_memory_2,"Hello Parent from
Child#1");
}
return 0;
return 0;
}
No comments
Post a Comment