Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Тестовые примеры / ch12 / scan3 / scan_cls2
.C#include <errno.h>
#include "scan2.h"
#include "RPC.h"
char* transp = "tcp";
//extern int errno;
int main( int argc, char* argv[])
{
static res result;
infolist nl;
if (argc<3) {
cerr << "usage: " << argv[0] << " host direcoty [<long>]\n";
return 1;
}
RPC_cls cl( argv[1], SCANPROG, SCANVER, transp );
if (!cl.good()) return 1;
cl.set_auth( AUTH_SYS );
if (cl.call( 0, (xdrproc_t)xdr_void, 0, (xdrproc_t)xdr_void, 0 ) == RPC_SUCCESS)
cout << "Prog " << SCANPROG << " (version " << SCANVER << ") is alive\n";
else {
cerr << "Prog " << SCANPROG << " version " << SCANVER << " is dead!\n";
return 2;
}
struct arg_rec *iarg = (struct arg_rec*)malloc(sizeof(struct arg_rec));
iarg->dir_name = argv[2];
iarg->lflag = 0;
if (argc==4 && sscanf(argv[3],"%u",&(iarg->lflag))!=1) {
fprintf(stderr,"Invalid argument: '%s'\n", argv[3]);
return 3;
}
if (cl.call( SCANDIR, (xdrproc_t)xdr_argPtr, (caddr_t)&iarg,
(xdrproc_t)xdr_res, (caddr_t)&result) != RPC_SUCCESS)
{
cerr << "client: call RPC fails\n";
return 4;
}
if (result.errno) {
errno = result.errno;
perror(iarg->dir_name);
return 5;
}
for (nl=result.res_u.list; nl; nl=nl->next) {
if (iarg->lflag)
cout << "..." << nl->name << ", uid=" << nl->uid << ", mtime="
<< ctime(&nl->modtime) << endl;
else cout << "...'" << nl->name << "'\n";
}
return 0;
}