Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
17
Добавлен:
01.05.2014
Размер:
1.59 Кб
Скачать
#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;
}
    
Соседние файлы в папке scan3