0% found this document useful (0 votes)
64 views

Include

The document describes a C program that uses shared memory and semaphores for interprocess communication between a server and client process. The server creates a shared memory segment and semaphore, writes a string to the shared memory, and releases the resources. The client accesses the same shared memory and semaphore, reads the string from shared memory, and releases the resources. Sample output shows the server writing "THIS IS A TEST ONLY A TEST" to shared memory, and the client reading the same string.

Uploaded by

Pammi Kavitha
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
64 views

Include

The document describes a C program that uses shared memory and semaphores for interprocess communication between a server and client process. The server creates a shared memory segment and semaphore, writes a string to the shared memory, and releases the resources. The client accesses the same shared memory and semaphore, reads the string from shared memory, and releases the resources. Sample output shows the server writing "THIS IS A TEST ONLY A TEST" to shared memory, and the client reading the same string.

Uploaded by

Pammi Kavitha
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 3

# include <sys /types .h> # include <sys /ipc .h> # include <sys /shm .

h> # include <sys /sem .h> # include <stdio .h> # include <stdlib .h> # include <string .h> # define SHMKEY ( key_t )4321 # define SEMKEY ( key_t )9876 # define SHMSIZE 256 # define PERMS 0600 union semnum { int val ; struct semid_ds *buff ; unsigned short * array ; }; main (){ int shmid , semid ; char line [128] , *shmem ; struct sembuf oper [1]={0 ,1 ,0}; union semnum arg ; if (( shmid = shmget (SHMKEY , SHMSIZE , PERMS | IPC_CREAT )) < 0) { perror(" shmget "); exit (1) ; } printf(" Creating shared memory with ID: %d\n",shmid ); /* create a semaphore */ if (( semid = semget(SEMKEY , 1, PERMS | IPC_CREAT )) <0) { perror(" semget "); exit (1) ; } printf(" Creating a semaphore with ID: %d \n",semid ); arg .val =0; /* initialize semaphore for locking */ if ( semctl(semid , 0, SETVAL , arg ) <0) { perror(" semctl "); exit (1) ; } printf(" Initializing semaphore to lock \n"); if ( (shmem = shmat (shmid , (char *)0, 0)) == (char *) -1) { perror(" shmem "); exit (1) ; } printf(" Attaching shared memory segment \ nEnter a string: "); fgets (line , sizeof (line ), stdin ); line [ strlen( line ) -1]= \0 ; strcpy(shmem , line ); printf(" Writing to shared memory region: %s\n", line ); if ( semop (semid , &oper [0], 1) < 0 ) { perror(" semop "); exit (1) ; } shmdt (shmem ); printf(" Releasing shared memory region \n"); }

# include <sys /types .h> # include <sys /ipc .h> # include <sys /shm .h> # include <sys /sem .h> # include <stdio .h> # include <stdlib .h> # include <string .h> # define SHMKEY ( key_t )4321 # define SEMKEY ( key_t )9876 # define SHMSIZE 256 # define PERMS 0600 main (){ int shmid , semid ; char *shmem ; struct sembuf oper [1]={0 , -1 ,0}; if (( shmid = shmget (SHMKEY , SHMSIZE , PERMS )) < 0) { perror(" shmget "); exit (1) ; } printf(" Accessing shared memory with ID: %d\n",shmid ); /* accessing a semaphore */ if (( semid = semget(SEMKEY , 1, PERMS )) <0) { perror(" semget "); exit (1) ; } printf(" Accessing semaphore with ID: %d \n",semid ); if ( (shmem = shmat (shmid , (char *) 0, 0)) == (char *) -1 ) { perror(" shmat "); exit (1) ; } printf(" Attaching shared memory segment \n"); printf(" Asking for access to shared memory region \n"); if ( semop (semid , &oper [0], 1) <0) { perror(" semop "); exit (1) ; } printf(" Reading from shared memory region : %s\n", shmem ); /* detach shared memeory */ shmdt (shmem ); /* destroy shared memory */ if ( shmctl(shmid , IPC_RMID , ( struct shmid_ds *)0 ) <0) { perror(" semctl "); exit (1) ; } printf(" Releasing shared segment with identifier %d\n", shmid ); /* destroy semaphore set */ if ( semctl(semid , 0, IPC_RMID , 0) <0 ) { perror(" semctl "); exit (1) ; } printf(" Releasing semaphore with identifier %d\n", semid ); }
The server:

ad@ad -desktop :~/ SysProMaterial /Set008 /src /V- Sems$ ./sem - server Creating shared memory with ID: 22511641 Creating a semaphore with ID: 327688 Initializing semaphore to lock Attaching shared memory segment Enter a string:

The client: ad@ad -desktop :~/ SysProMaterial /Set008 /src /V- Sems$ ./sem - client Accessing shared memory with ID: 22511641 Accessing semaphore with ID: 327688 Attaching shared memory segment Asking for access to shared memory region

Server: ad@ad -desktop :~/ src /V-Sems$ ./sem -server Creating shared memory with ID: 22511641 Creating a semaphore with ID: 327688 Initializing semaphore to lock Attaching shared memory segment Enter a string: THIS IS A TEST ONLY A TEST Writing to shared memory region: THIS IS A TEST ONLY A TEST Releasing shared memory region ad@ad -desktop :~/ src /V-Sems$ Client: ad@ad -desktop :~/ src /V-Sems$ ./sem -client Accessing shared memory with ID: 22511641 Accessing semaphore with ID: 327688 Attaching shared memory segment Asking for access to shared memory region Reading from shared memory region : THIS IS A TEST ONLY A TEST Releasing shared segment with identifier 22511641 Releasing semaphore with identifier 327688 ad@ad -desktop :~/ src /V-Sems$

You might also like