/*******************************************************************************/ /* msqServer.cpp -- The server process * The server process for jg162.cc (client processs) * John Gray, Inrerprocess Communications in UNIX, P.163 */ #include "local6.h" int main(int argc, char *argv[]) { int mid, n; MESSAGE msg; void process_msg(char *, int); if (argc != 3) { fprintf(stderr, "Usage: %s msg_id &\n", argv[0]); exit(1); } mid = atoi(argv[1]); /* message queue ID via cmd line */ while (1) { if ((n=msgrcv(mid, &msg, sizeof(msg), SERVER, 0)) == -1) { perror("Server: msgrcv"); exit(2); } else if (n == 0) /* client is done */ break; else{ process_msg(msg.buffer, strlen(msg.buffer)); msg.msg_to = msg.msg_fm; /* swap to <> from info*/ msg.msg_fm = SERVER; if (msgsnd(mid, &msg, sizeof(msg), 0 ) == -1) { perror("Server: msgsnd"); exit(3); } } } msgctl(mid,IPC_RMID, (struct msqid_ds *) 0); exit(0); } /* Conver lower case alphabetics to upper case */ void process_msg(char *b, int len) { int i; for(i =0; i < len; ++i) if(isalpha(* (b + i))) *(b+i) = toupper(*(b+i)); }