#include #include #include #include #include #include #define key_in 1234 #define key_out 4321 #define size 1024 static int input_id; static int output_id; static int send_id; static int receive_id; void term() { printf("Strg+c...sending quit to msq\n"); msgsnd(output_id,"quit",strlen("quit"),0); msgctl(output_id,IPC_RMID,0); exit(0); } int main(int argc, char *argv[]) { int n; char outtext[size]; char intext[size]; signal(SIGINT,term); input_id=msgget(key_in,IPC_CREAT); output_id=msgget(key_out,IPC_CREAT); if (input_id == -1) { printf("input msgget failed ....%d\n",errno); return -1; } if (output_id == -1) { printf("output msgget failed ....\n"); return -1; } while(1) { fgets(outtext, 10, stdin); printf("output text %s\n", outtext); send_id=msgsnd(output_id,outtext,strlen(outtext),0); if (send_id < 0) { printf("msg snd failed ...%d\n",errno); return -1; } if (strcmp(outtext,"quit") == 0) { printf("<>\n"); msgctl(output_id,IPC_RMID,0); return 0; } receive_id=msgrcv(input_id,intext,strlen(intext),0,0); if(receive_id < 0) { printf("msgrcv failed ...\n"); return -1; } fprintf("input text %s\n", intext); } }