Advertisement
Guest User

Untitled

a guest
Mar 19th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.66 KB | None | 0 0
  1. #include <sys/ipc.h>
  2. #include <sys/shm.h>
  3. #include <stdio.h>
  4. #include <errno.h>
  5. #include <stdlib.h>
  6. #include <unistd.h>
  7.  
  8. int main()
  9. {
  10.   int sharedMemoryDescriptor;
  11.   char filename[] = "server.c";
  12.   key_t clientKey;     /* IPC ΠΊΠ»ΡŽΡ‡ */
  13.   int i = 0;
  14.   char* pSharedMemory;
  15.  
  16.   if((clientKey = ftok(filename, 0)) < 0)
  17.   {
  18.       printf("Error! Cannot generate key\n");
  19.       exit(-1);
  20.   }
  21.  
  22.   if((sharedMemoryDescriptor = shmget(clientKey, 4096, 0666)) < 0)
  23.   {
  24.       if(errno != EEXIST)
  25.       {
  26.           printf("Error! Cannot create shared memory\n");
  27.           exit(-1);
  28.       }
  29.       else if((sharedMemoryDescriptor = shmget(clientKey, 4096, 0)) < 0)
  30.       {
  31.           printf("Error! Cannot find shared memory\n");
  32.           exit(-1);
  33.       }
  34.   }
  35.  
  36.   if((pSharedMemory = (char *)shmat(sharedMemoryDescriptor, (char*)NULL, 0)) == (char *)(-1))
  37.   {
  38.       printf("Error! Cannot shared memory\n");
  39.       exit(-1);
  40.   }
  41.  
  42.   pSharedMemory[0] = 0;
  43.   for (i = 0; i < 3; i++)
  44.   {
  45.     switch(i)
  46.     {
  47.       case 0:
  48.         pSharedMemory[4] = pSharedMemory[5] = pSharedMemory[6] ='A';
  49.       case 1:
  50.         pSharedMemory[7] = pSharedMemory[8] = pSharedMemory[9] ='B';
  51.       case 2:
  52.         pSharedMemory[10] = pSharedMemory[11] = pSharedMemory[12] ='C';
  53.     }
  54.  
  55.     pSharedMemory[0] += (char)3;
  56.     printf("Shared memory size: %d\n", pSharedMemory[0]);
  57.     sleep(5);
  58.   }
  59.  
  60.   for (i = 0; i < 9; i++)
  61.   {
  62.     printf("%c ", pSharedMemory[i + 4]);
  63.   }
  64.  
  65.   pSharedMemory[0] = (char)(-1);
  66.  
  67.   if(shmdt(pSharedMemory) < 0)
  68.   {
  69.       printf("Can't detach shared memory\n");
  70.       exit(-1);
  71.   }
  72.  
  73.   printf("\nClient has been left\n");
  74.   return 0;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement