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>
- int descr;
- struct message n,l;
- struct message{
- long mtype;
- pid_t pid;
- char mtext[100];
- };
- static void sigHandle(int signum);
- void main(){
- if(signal(SIGINT, sigHandle) == SIG_ERR){
- perror("Can't handle a signal SIGINT.");
- exit(1);
- }
- if(signal(SIGUSR1, sigHandle) == SIG_ERR){
- perror("Can't handle a signal SIGUSR1.");
- exit(1);
- }
- n.mtype=2;
- n.pid=getpid();
- l.mtype=1;
- descr = msgget(100,IPC_CREAT|0666);
- printf("descriptor : %d\n", descr);
- printf("PID : %d\n", getpid());
- if(descr==-1){
- printf("msgget");
- }
- while(1){
- strcpy(n.mtext, "[msg2] : ");
- char buf[100];
- scanf("%s", buf);
- strcat(n.mtext, buf);
- int res1=msgsnd(descr,&n,sizeof(struct message),0);
- if(res1==-1){
- printf("msgsnd");
- }
- int res2;
- do{
- res2=msgrcv(descr,&l,sizeof(struct message),1,IPC_NOWAIT);
- if(res2!=-1){
- printf("%s\n",l.mtext);
- }
- }while(res2!=-1);
- }
- }
- static void sigHandle(int signum){
- if(signum == SIGUSR1){
- printf("Other pal has quited.\n");
- exit(0);
- }
- if(signum == SIGINT){
- printf("\nSIGINT has been received, terminated.\n");
- kill(l.pid, SIGUSR1);
- msgctl(descr, IPC_RMID, 0);
- exit(0);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment