Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <sys/types.h>
- #include <sys/ipc.h>
- #include <sys/msg.h>
- #include <unistd.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <signal.h>
- struct message{
- long type;
- char text[200];
- long from;
- };
- struct message m,p;
- int descr,rcv;
- long a,b;
- void func(int sig){
- printf("Беседу закончено.\n");
- m.from=a;
- strcpy(m.text,"Собеседник завершил беседу.");
- int snd=msgsnd(descr,&m,sizeof(struct message),0);
- if(snd==-1){
- perror("Не удалось отправить сообщение.\n");
- exit(2);
- }
- exit(0);
- }
- void main(){
- if(signal(SIGINT, func) == SIG_ERR){
- perror("Невозможно перехватить сигнал\n");
- exit(1);
- }
- printf("TO:");
- scanf("%ld", &a);
- printf("FROM:");
- scanf("%ld", &b);
- m.type=a;
- m.from=b;
- descr = msgget(200,IPC_CREAT|0666);
- if(descr==-1){
- perror("Не удалось создать очередь.\n");
- exit(2);
- }
- if(fork()==0){
- while(1){
- printf("Вы: ");
- scanf("%s", m.text);
- int snd=msgsnd(descr,&m,sizeof(struct message),0);
- if(snd==-1){
- perror("Не удалось отправить сообщение.\n");
- exit(2);
- }
- }
- }
- else{
- while(1){
- rcv=msgrcv(descr,&p,sizeof(struct message),b,IPC_NOWAIT);
- if(rcv!=-1){
- if(p.type==p.from){
- printf("Собеседник завершил беседу.\n");
- msgctl(descr, IPC_RMID, 0);
- exit(0);
- }
- printf("Собеседник: %s\n",p.text);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement