/*******************************************************************************/ /* msqClient.cpp -- The client process * The client process for jg163.cc (server processs) * John Gray, Inrerprocess Communications in UNIX, P.162 */ #include #include "local6.h" int main(void) { pid_t cli_pid; /*Process ID*/ int mid, n, n_read; /*Message queue ID*/ MESSAGE msg,m_rec; /* Message structure*/ cli_pid = getpid(); /* Create and gain access to message queue*/ mid=msgget(getuid(), 0); std::cout << "CMD >"; std::cout.flush(); memset(msg.buffer, 0x0, BUFSIZ); /*Clear buffer */ n_read = read(fileno(stdin), msg.buffer, BUFSIZ); while (n_read>1) { msg.msg_type = 1; /* Tag with ser PID */ msg.sender= cli_pid; /* Server needs cliebt PID */ if(msgsnd(mid, &msg, sizeof(msg), 0) == -1) { perror("Client: msgsnd"); exit(5); } if((n=msgrcv(mid, &m_rec, sizeof(m_rec), cli_pid, MSG_NOERROR)) != -1) { printf("%d bytes received\n",n); write(fileno(stdout), m_rec.buffer, strlen(m_rec.buffer)); } std::cout << "Hit ENTER to Quit\nCMD >"; std::cout.flush(); memset(msg.buffer, 0x0, BUFSIZ); /*Clear buffer */ n_read = read(fileno(stdin), msg.buffer, BUFSIZ); } return(0); }