#include "socket.h" #include #define BUF_SIZE 1048576 #define FILE_NAME 20 void RMPerror(char *string) { printf("%s\n",string); } int main(int argc, char **argv) { int readsd, nfound, byteread, bytewrite; fd_set rmask, mask; char groupName[20]; char rbuf[BUF_SIZE]; char wbuf[BUF_SIZE]; char rfilename[FILE_NAME]; char wfilename[FILE_NAME]; struct timeval timeout; FILE *rfile, *wfile; timeout.tv_sec=3; timeout.tv_usec=0; if(argc < 3) { exit(1); } strcpy(groupName, argv[1]); strcpy(wfilename, argv[2]); wfile = fopen(wfilename, "w"); if((readsd = RMPSocket()) == -1) { RMPerror("socket"); exit(1); } if(RMPConnect(readsd, groupName) == -1) { RMPerror("connect"); exit(1); } FD_ZERO(&mask); FD_SET(readsd, &mask); while(1) { memcpy(&rmask, &mask, sizeof(fd_set)); nfound = RMPSelect(readsd, &rmask, (fd_set *)0, (fd_set *)0, NULL); if(nfound < 0) { if(errno==EINTR) { printf("Interrupted system call\n"); continue; } RMPerror("select"); break; } if(FD_ISSET(readsd, &rmask)){ byteread = RMPRead(readsd, rbuf, BUF_SIZE); printf("*******bytes read 1 = %d\n", byteread); if (byteread != -1) { fwrite(rbuf, 1, byteread, wfile); fflush(wfile); } else { RMPerror("read"); break; } } } RMPClose(readsd); }