Advertisement
Guest User

Untitled

a guest
May 28th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.72 KB | None | 0 0
  1. #include <sys/types.h>
  2. #include <sys/ipc.h>
  3. #include <sys/msg.h>
  4. #include <unistd.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include <signal.h>
  9. struct message{
  10.     long type;
  11.     char text[200];
  12.     long from;
  13. };
  14. struct message m,p;
  15. int descr,rcv;
  16. long a,b;
  17. void func(int sig){
  18.         printf("Беседу закончено.\n");
  19.         m.from=a;
  20.     strcpy(m.text,"Собеседник завершил беседу.");
  21.     int snd=msgsnd(descr,&m,sizeof(struct message),0);
  22.         if(snd==-1){
  23.             perror("Не удалось отправить сообщение.\n");
  24.         exit(2);
  25.         }
  26.         exit(0);
  27. }
  28. void main(){
  29.     if(signal(SIGINT, func) == SIG_ERR){
  30.             perror("Невозможно перехватить сигнал\n");
  31.             exit(1);
  32.     }
  33.     printf("TO:");
  34.     scanf("%ld", &a);
  35.     printf("FROM:");
  36.     scanf("%ld", &b);  
  37.     m.type=a;
  38.         m.from=b;
  39.         descr = msgget(200,IPC_CREAT|0666);
  40.         if(descr==-1){
  41.             perror("Не удалось создать очередь.\n");
  42.             exit(2);
  43.         }
  44.         if(fork()==0){
  45.         while(1){
  46.                 printf("Вы: ");
  47.                 scanf("%s", m.text);
  48.                 int snd=msgsnd(descr,&m,sizeof(struct message),0);
  49.                 if(snd==-1){
  50.                         perror("Не удалось отправить сообщение.\n");
  51.                     exit(2);
  52.                 }
  53.         }
  54.         }
  55.         else{
  56.         while(1){
  57.                 rcv=msgrcv(descr,&p,sizeof(struct message),b,IPC_NOWAIT);
  58.             if(rcv!=-1){
  59.                     if(p.type==p.from){
  60.                         printf("Собеседник завершил беседу.\n");
  61.                     msgctl(descr, IPC_RMID, 0);
  62.                         exit(0);
  63.                     }
  64.                         printf("Собеседник: %s\n",p.text);
  65.                 }
  66.         }
  67.     }
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement