11905Swollman/* @(#)rls.c 2.2 88/08/12 4.0 RPCSRC */ 21905Swollman/* 31905Swollman * rls.c: Remote directory listing client 41905Swollman */ 51905Swollman#include <stdio.h> 61905Swollman#include <rpc/rpc.h> /* always need this */ 71905Swollman#include "dir.h" /* need this too: will be generated by rpcgen*/ 81905Swollman 91905Swollmanextern int errno; 101905Swollman 111905Swollmanmain(argc, argv) 121905Swollman int argc; 131905Swollman char *argv[]; 141905Swollman{ 151905Swollman CLIENT *cl; 161905Swollman char *server; 171905Swollman char *dir; 181905Swollman readdir_res *result; 191905Swollman namelist nl; 201905Swollman 218875Srgrimes 221905Swollman if (argc != 3) { 231905Swollman fprintf(stderr, "usage: %s host directory\n", argv[0]); 241905Swollman exit(1); 251905Swollman } 261905Swollman 271905Swollman /* 281905Swollman * Remember what our command line arguments refer to 291905Swollman */ 301905Swollman server = argv[1]; 311905Swollman dir = argv[2]; 321905Swollman 331905Swollman /* 341905Swollman * Create client "handle" used for calling DIRPROG on the 351905Swollman * server designated on the command line. We tell the rpc package 361905Swollman * to use the "tcp" protocol when contacting the server. 371905Swollman */ 381905Swollman cl = clnt_create(server, DIRPROG, DIRVERS, "tcp"); 391905Swollman if (cl == NULL) { 401905Swollman /* 411905Swollman * Couldn't establish connection with server. 421905Swollman * Print error message and die. 431905Swollman */ 441905Swollman clnt_pcreateerror(server); 451905Swollman exit(1); 461905Swollman } 478875Srgrimes 481905Swollman /* 491905Swollman * Call the remote procedure "readdir" on the server 501905Swollman */ 511905Swollman result = readdir_1(&dir, cl); 521905Swollman if (result == NULL) { 531905Swollman /* 548875Srgrimes * An error occurred while calling the server. 551905Swollman * Print error message and die. 561905Swollman */ 571905Swollman clnt_perror(cl, server); 581905Swollman exit(1); 591905Swollman } 601905Swollman 611905Swollman /* 621905Swollman * Okay, we successfully called the remote procedure. 631905Swollman */ 641905Swollman if (result->errno != 0) { 651905Swollman /* 661905Swollman * A remote system error occurred. 671905Swollman * Print error message and die. 681905Swollman */ 691905Swollman errno = result->errno; 701905Swollman perror(dir); 711905Swollman exit(1); 721905Swollman } 731905Swollman 741905Swollman /* 751905Swollman * Successfuly got a directory listing. 761905Swollman * Print it out. 771905Swollman */ 781905Swollman for (nl = result->readdir_res_u.list; nl != NULL; nl = nl->next) { 791905Swollman printf("%s\n", nl->name); 801905Swollman } 811905Swollman} 82