home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume13 / rpc3.9 / part06 / demo / dir / rls.c < prev   
Encoding:
C/C++ Source or Header  |  1988-02-27  |  1.6 KB  |  82 lines

  1. /* @(#)rls.c    1.1 87/11/04 3.9 RPCSRC */
  2. /*
  3.  * rls.c: Remote directory listing client
  4.  */
  5. #include <stdio.h>
  6. #include <rpc/rpc.h>        /* always need this */
  7. #include "dir.h"        /* need this too: will be generated by rpcgen*/
  8.  
  9. extern int errno;
  10.  
  11. main(argc, argv)
  12.     int argc;
  13.     char *argv[];
  14. {
  15.     CLIENT *cl;
  16.     char *server;
  17.     char *dir;
  18.     readdir_res *result;
  19.     namelist nl;
  20.     
  21.  
  22.     if (argc != 3) {
  23.         fprintf(stderr, "usage: %s host directory\n", argv[0]);
  24.         exit(1);
  25.     }
  26.  
  27.     /*
  28.      * Remember what our command line arguments refer to
  29.      */
  30.     server = argv[1];
  31.     dir = argv[2];
  32.  
  33.     /*
  34.      * Create client "handle" used for calling MESSAGEPROG on the
  35.      * server designated on the command line. We tell the rpc package
  36.      * to use the "tcp" protocol when contacting the server.
  37.      */
  38.     cl = clnt_create(server, DIRPROG, DIRVERS, "tcp");
  39.     if (cl == NULL) {
  40.         /*
  41.          * Couldn't establish connection with server.
  42.          * Print error message and die.
  43.          */
  44.         clnt_pcreateerror(server);
  45.         exit(1);
  46.     }
  47.     
  48.     /*
  49.      * Call the remote procedure "readdir" on the server
  50.      */
  51.     result = readdir_1(&dir, cl);
  52.     if (result == NULL) {
  53.         /*
  54.          * An error occurred while calling the server. 
  55.           * Print error message and die.
  56.          */
  57.         clnt_perror(cl, server);
  58.         exit(1);
  59.     }
  60.  
  61.     /*
  62.      * Okay, we successfully called the remote procedure.
  63.      */
  64.     if (result->errno != 0) {
  65.         /*
  66.          * A remote system error occurred.
  67.          * Print error message and die.
  68.          */
  69.         errno = result->errno;
  70.         perror(dir);
  71.         exit(1);
  72.     }
  73.  
  74.     /*
  75.      * Successfuly got a directory listing.
  76.      * Print it out.
  77.      */
  78.     for (nl = result->readdir_res_u.list; nl != NULL; nl = nl->next) {
  79.         printf("%s\n", nl->name);
  80.     }
  81. }
  82.