JavaScript is required to for searching.
Skip Navigation Links
Exit Print View
ONC+ Developer's Guide     Oracle Solaris 11.1 Information Library
search filter icon
search icon

Document Information

Preface

1.  Introduction to ONC+ Technologies

2.  Introduction to TI-RPC

3.  rpcgen Programming Guide

4.  Programmer's Interface to RPC

5.  Advanced RPC Programming Techniques

6.  Porting From TS-RPC to TI-RPC

7.  Multithreaded RPC Programming

8.  Extensions to the Oracle Solaris RPC Library

A.  XDR Technical Note

B.  RPC Protocol and Language Specification

C.  XDR Protocol Specification

D.  RPC Code Examples

Directory Listing Program and Support Routines (rpcgen)

Time Server Program (rpcgen)

Add Two Numbers Program (rpcgen)

Spray Packets Program (rpcgen)

Print Message Program With Remote Version

Batched Code Example

Non-Batched Example

E.  portmap Utility

Glossary

Index

Print Message Program With Remote Version

Example D-7 printmesg.c

/* printmsg.c: print a message on the console */
#include <stdio.h>

main(argc, argv)
     int argc;
     char *argv[];
{
    char *message;

    if (argc != 2) {
        fprintf(stderr, "usage: %s <message>\n", argv[0]);
        exit(1);
    }
    message = argv[1];
    if( !printmessage(message) ) {
        fprintf(stderr, "%s: couldn't print your message\n",
                argv[0]);
        exit(1);
    }
    printf("Message Delivered!\n");
    exit(0);
}

/* Print a message to the console. */

/*
 * Return a boolean indicating whether the message was actually
 * printed.
 */
printmessage(msg)
    char *msg;
{
    FILE *f;

    if = fopen("/dev/console","w");
        if (f == (FILE *)NULL)
            return (0);
    fprintf(f,"%sen”, msg);
    fclose(f);
    return (1);
}

Example D-8 Remote Version of printmesg.c

/*
 * rprintmsg.c: remote version of "printmsg.c”
 */ 
#include <stdio.h> 
#include <rpc/rpc.h>    /* always needed */ 
#include "msg.h”     /* msg.h generated by rpcgen */ 

main(argc, argv) 
    int argc;
    char *argv[];
{
    CLIENT *cl; 
    int *result;      
    char *server;
    char *message;
    extern int sys_nerr;
    extern char *sys_errlist[]; 

    if (argc != 3) { 
        fprintf(stderr,"usage: %s host messagen", argv[0]);
        exit(1);
    }
    /* 
     * Save values of command line arguments
     */
    server = argv[1];
    message = argv[2]; 
/*
 * Create client"handle” used for calling
 * MESSAGEPROG on the server
 * designated on the command line.
 */ 
    cl = clnt_create(server, MESSAGEPROG, PRINTMESSAGEVERS,
                     "visible");
    if (cl == (CLIENT *)NULL) {
        /* 
         * Couldn't establish connection with server.
         * Print error message and die.
         */
        clnt_pcreateerror(server);
        exit(1);
    }
    /* Call the remote procedure "printmessage" on the server */
    result = printmessage_1(&message, cl);
    if (result == (int *)NULL) {      
    /*
     * An error occurred while calling the server.
     * Print error message and die.
     */ 
        clnt_perror(cl, server);
        exit(1);
    }
    /* Okay, we successfully called the remote procedure. */
    if (*result == 0) { 
        /*
         * Server was unable to print our message.
         * Print error message and die.
         */
        fprintf(stderr,"%s"
    }
/* The message got printed on the server's console */
    printf("Message delivered to %s!\n", server);
    exit(0);
}

Example D-9 rpcgen Program: msg.x

/* msg.x: Remote message printing protocol */
program MESSAGEPROG {
     version MESSAGEVERS {
         int PRINTMESSAGE(string) = 1;
     } = 1;
} = 0x20000001;

Example D-10 mesg_proc.c

/*
 * msg_proc.c: implementation of the remote
 * procedure "printmessage"
 */

#include <stdio.h>
#include <rpc/rpc.h>     /* always needed */
#include "msg.h”     /* msg.h generated by rpcgen */

/*
 * Remote version of "printmessage"
 */
/*ARGSUSED1*/
int printmessage_1(msg, req)
    char **msg;
    struct svc_req *req;
{
    static int result; /* must be static! */
    FILE *f;

    f = fopen("/dev/console", "w");
    if (f == (FILE *)NULL) {
        result = 0;
        return (&result);
    }
    fprintf(f, "%sen", *msg);
     fclose(f);
     result = 1;
     return (&result);
}