#include <stdio.h> #include <stdlib.h> #include <rpcsvc/rstat.h> int main(int argc, char * argv[]) { if (argc != 2) { fprintf(stderr, "Command format is \"%s hostname\".\n", argv[0]); return EXIT_FAILURE; } int dsk; if ((dsk = havedisk(argv[1])) < 0) { fprintf(stderr, "havedisk(%s) failed.\n", argv[1]); return EXIT_FAILURE; } printf("%s %s a disk.\n", argv[1], dsk ? "has" : "doesn't have"); return EXIT_SUCCESS; }
cl make cc-high-rstat g++ -c cc-high-rstat.cc -o cc-high-rstat.o g++ -o cc-high-rstat cc-high-rstat.o -lrpcsvc cl uname -a SunOS clayton 5.7 Generic_106541-11 sun4u sparc SUNW,Ultra-5_10 cl cc-high-rstat cslab05 cslab05 has a disk. cl cc-high-rstat clayton clayton has a disk. cl cc-high-rstat starbase.se.monmouth.edu starbase.se.monmouth.edu has a disk. cl cc-high-rstat cslab00 havedisk(cslab00) failed. cl rsh cslab00 ps -Af | grep -i rpc root 156 1 0 Jan 29 ? 1:32 /usr/sbin/rpcbind root 186 1 0 Jan 29 ? 0:00 /usr/lib/netsvc/yp/rpc.ypupdated root 171 169 0 Jan 29 ? 5:57 rpc.nisd_resolv -F -C 8 root 667 1 0 Jan 29 ? 0:00 /usr/sbin/rpc.bootparamd root 785 213 0 Jan 29 ? 0:00 /usr/dt/bin/rpc.ttdbserverd cl rsh cslab05 ps -Af | grep -i rpc root 105 1 0 Feb 12 ? 0:00 /usr/sbin/rpcbind root 338 142 0 Feb 12 ? 0:00 rpc.ttdbserverd daemon 537 142 0 Feb 13 ? 0:00 rpc.cmsd root 2835 142 0 16:14:20 ? 0:00 rpc.rstatd
#include <stdio.h> #include <stdlib.h> #define PORTMAP #include <rpc/rpc.h> #include <rpcsvc/rstat.h> #include <rpc/xdr.h> int main(int argc, char * argv[]) { if (argc != 2) { fprintf(stderr, "Command format is \"%s hostname\".\n", argv[0]); return EXIT_FAILURE; } int dsk; enum clnt_stat stat = callrpc( argv[1], RSTATPROG, RSTATVERS_VAR, RSTATPROC_HAVEDISK, xdr_void, 0, xdr_u_long, &dsk); if (stat) { clnt_perrno(stat); return EXIT_FAILURE; } printf("%s %s a disk.\n", argv[1], dsk ? "has" : "doesn't have"); return EXIT_SUCCESS; }
cl make cc-mid-rstat g++ -c cc-mid-rstat.cc -o cc-mid-rstat.o g++ -o cc-mid-rstat cc-mid-rstat.o -lnsl cl cc-mid-rstat clayton clayton has a disk. cl cc-mid-rstat cslab05 cslab05 has a disk. cl cc-mid-rstat starbase.se.monmouth.edu RPC: Program/version mismatch cl
int main(int argc, char * argv[]) { struct hostent *hp; if ((hp = gethostbyname(argv[1])) == NULL) { fprintf(stderr, "can't get addr for %s\n",argv[1]); return EXIT_FAILURE; } int sock = RPC_ANYSOCK; struct timeval pertry_timeout, total_timeout; struct sockaddr_in server_addr; pertry_timeout.tv_sec = 3; pertry_timeout.tv_usec = 0; bcopy(hp->h_addr, (caddr_t)&server_addr.sin_addr, hp->h_length); server_addr.sin_family = AF_INET; server_addr.sin_port = 0; CLIENT *client = clntudp_create(&server_addr, RSTATPROG, RSTATVERS_VAR, pertry_timeout, &sock); if (NULL == client) { clnt_pcreateerror("clntudp_create"); return EXIT_FAILURE; } total_timeout.tv_sec = 20; total_timeout.tv_usec = 0; unsigned long dsk; enum clnt_stat stat = clnt_call(client, RSTATPROC_HAVEDISK, (bool_t (*)(XDR *, void *)) xdr_void, 0, xdr_u_long, (char *) &dsk, total_timeout); if (stat != RPC_SUCCESS) { clnt_perror(client, "rpc"); return EXIT_FAILURE; } printf("%s %s a disk.\n", argv[1], dsk ? "has" : "doesn't have"); clnt_destroy(client); close(sock); return EXIT_SUCCESS; }
cl cc-low-rstat cslab05 cslab05 has a disk. cl cc-low-rstat cslab00 clntudp_create: RPC: Program not registered cl cc-low-rstat starbase.se.monmouth.edu rpc: RPC: Program/version mismatch; low version = 1, high version = 3 cl
This page last modified on 10 April 2001.