Advertisement
Guest User

serer/klient - pamięć współdzielona

a guest
Mar 31st, 2015
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.04 KB | None | 0 0
  1. SERWER:
  2. //
  3. //  gcc ms.c -oms.o -lncurses
  4. //
  5. #include  <stdlib.h>
  6. #include  <errno.h>
  7. #include  <sys/types.h>
  8. #include  <sys/ipc.h>
  9. #include  <sys/sem.h>
  10. #include  <sys/shm.h>
  11. #include  <signal.h>
  12. #include  <ncurses.h>
  13.  
  14. #define PERM        0660          // prawa dostepu
  15. #define KLUCZ_SEM   (key_t)1232
  16. #define KLUCZ_MEM   (key_t)0x10
  17.  
  18.  
  19.  
  20. void koniec() {
  21.  
  22.   curs_set(1);
  23.   clear();
  24.   refresh();
  25.   endwin();
  26.      
  27.   if(shmctl(id_mem, IPC_RMID, NULL) == -1)    
  28.         perror("\n   S. MEM_RMID error  ");//usuwanie pamięci współdzielonej
  29.  
  30.  
  31.   printf("\n      Ctrl_C Serwera\n\n");
  32.   exit(EXIT_SUCCESS);
  33. }
  34.  
  35. int main(void) {
  36.  
  37.   signal(SIGINT, koniec);
  38.  
  39.   if ((id_mem=shmget(KLUCZ_MEM, 400*sizeof(int), PERM | IPC_CREAT | IPC_EXCL))==-1) { ////size int rozmiar do odwoływania                                          się
  40.      perror("\n   S. MEM_CREAT error  ");
  41.      exit(EXIT_FAILURE);
  42.   }
  43.   if ((adres = (int *)shmat(id_mem,0, 0)) == ((int *)-1)) { //shmat powoduje, że uzyskujemy wskaźnik do pamięci                                współdzielonej
  44.      perror("\n   S. MEM_SHMAT error  ");
  45.      if(shmctl(id_mem, IPC_RMID, NULL) == -1)    
  46.           perror("\n   S. MEM_RMID error  ");
  47.      exit(EXIT_FAILURE);
  48.   }
  49.   initscr();
  50.   curs_set(0);
  51.   start_color();
  52.   clear();
  53.   int i,j;
  54.   for(i=0;i<20;i++)
  55. {
  56. for(j=0;j<20;j++)
  57. {
  58. move(j,i*4);
  59. printw("[0 ]");
  60.  }  
  61. }
  62.   refresh();
  63.  
  64.  
  65.   while(1) {
  66.   for(i=0;i<20;i++)
  67. {
  68. for(j=0;j<20;j++)
  69. {
  70. ww =*(adres+j*20+i);
  71. move(j,i*4+1);
  72. printw("%d",ww);
  73.  }  
  74. }
  75.  
  76.     ww = *(adres+0); //*(adres) wyłuskanie adresu i przypisanie do zmiennej ww
  77.     move(5,19); printw("%d",ww);//
  78.     ww = *(adres+1);//
  79.     move(5,33); printw("%d",ww);  
  80.     k++; move(1,2); printw("%x", k);
  81.     refresh();  
  82.     sleep(3);  
  83.   }  
  84. }
  85. ---------------------------------------------------------------------
  86. KLIENT:
  87. //
  88. //   gcc mk.c -omk.o
  89. //
  90. #include  <unistd.h>
  91. #include  <stdlib.h>
  92. #include  <stdio.h>
  93. #include  <errno.h>
  94. #include  <sys/types.h>
  95. #include  <sys/ipc.h>
  96. #include  <sys/sem.h>
  97. #include  <sys/shm.h>
  98. #include  <signal.h>
  99.  
  100. #define PERM        0660          // prawa dostepu
  101. #define KLUCZ_SEM   (key_t)1232
  102. #define KLUCZ_MEM   (key_t)0x10
  103.  
  104.  
  105. int main(int argc, char *argv[]) {
  106.   int id_mem, ww;
  107.   int *adres;
  108.   short nr, wart;
  109.   if (argc<3) {
  110.     printf("\n Brak argumentow :  numer[0..1], wartosc [...], czas operacji [sek] \n\n");
  111.     exit(EXIT_FAILURE);
  112.   }
  113.     nr=atoi(argv[1]);
  114.   wart=atoi(argv[2]);
  115.  
  116.   if ((id_mem=shmget(KLUCZ_MEM, 2*sizeof(int),0))==-1) {
  117.      perror("\n   S. memget error  ");
  118.      exit(EXIT_FAILURE);
  119.   }  
  120.   if ((adres= (int *) shmat(id_mem,0,0)) == ((int *)-1)) {
  121.      perror("\n   S. MEM_SHMAT error  ");
  122.      exit(EXIT_FAILURE);
  123.   }
  124.  
  125.   printf("\n %d. Start. Mem[%d] -> %d  Opoz= %d",id_mem, nr, wartop);
  126.   fflush(stdout);
  127.  
  128.   *(adres+nr)+=wart; //zapisywanie do wartości
  129.   printf("\n %d.      . Mem[%d] ",id_mem, nr);
  130.   fflush(stdout);
  131.  
  132.   printf("\n %d.Koniec. Mem[%d] \n\n",id_mem, nr);
  133.   fflush(stdout);
  134.  
  135.   exit(EXIT_SUCCESS);
  136. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement