/* * rls.c: Remote directory listing client */ #include <stdio.h> #include <rpc/rpc.h> /* always need this */ #include "dir.h" /* generated by rpcgen */ extern int errno; main(argc, argv) int argc; char *argv[]; { CLIENT *cl; char *server; char *dir; readdir_res *result; namelist nl; if (argc != 3) { fprintf(stderr, "usage: %s host directory\n", argv[0]); exit(1); } server = argv[1]; dir = argv[2]; /* * Create client "handle" used for calling MESSAGEPROG on the server * designated on the command line. */ cl = clnt_create(server, DIRPROG, DIRVERS, "visible"); if (cl == (CLIENT *)NULL) { clnt_pcreateerror(server); exit(1); } result = readdir_1(&dir, cl); if (result == (readdir_res *)NULL) { clnt_perror(cl, server); exit(1); } /* Okay, we successfully called the remote procedure. */ if (result->errno != 0) { /* * A remote system error occurred. Print error message and die. */ } if (result->errno < sys_nerr) fprintf (stderr, "%s : %s\n", dir, sys_enlist[result->errno]); errno = result->errno; perror(dir); exit(1); } /* Successfully got a directory listing. Print it out. */ for(nl = result->readdir_res_u.list; nl != NULL; nl = nl- >next) { printf("%s\n", nl->name); } exit(0); |