RMTOPS(3)

NAME
rmtops - access tape drives on remote machines

LIBRARY
Remote Magnetic Tape Library (librmt, -lrmt)

SYNOPSIS
#include <rmt.h>
#include <sys/stat.h>
int
isrmt(int fd);
int
rmtaccess(char *file, int mode);
int
rmtclose(int fd);
int
rmtcreat(char *file, int mode);
int
rmtdup(int fd);
int
rmtfcntl(int fd, int cmd, int arg);
int
rmtfstat(int fd, struct stat *buf);
int
rmtioctl(int fd, int request, char *argp);
int
rmtisatty(int fd);
long
rmtlseek(int fd, long offset, int whence);
int
rmtlstat(char *file, struct stat *buf);
int
rmtopen(char *file, int flags, int mode);
int
rmtread(int fd, char *buf, int nbytes);
int
rmtstat(char *file, struct stat *buf);
int
rmtwrite(int fd, char *buf, int nbytes);

DESCRIPTION
The rmtops library provides a simple means of transparently accessing tape drives on remote machines via rsh(1) and rmt(8). These routines are used like their corresponding system calls, but allow the user to open up a tape drive on a remote system on which he or she has an account and the appropriate remote permissions.

A remote tape drive file name has the form
    [user@]hostname:/dev/???
where system is the remote system, /dev/??? is the particular drive on the remote system (raw, blocked, rewinding, non-rewinding, etc.), and the optional user is the login name to be used on the remote system, if different from the current user's login name.

For transparency, the user should include the file <rmt.h>, which has the following defines in it:

    #define access	rmtaccess
    #define close	rmtclose
    #define creat	rmtcreat
    #define dup	rmtdup
    #define fcntl	rmtfcntl
    #define fstat	rmtfstat
    #define ioctl	rmtioctl
    #define isatty	rmtisatty
    #define lseek	rmtlseek
    #define lstat	rmtlstat
    #define open	rmtopen
    #define read	rmtread
    #define stat	rmtstat
    #define write	rmtwrite

This allows the programmer to use open(2), close(2), read(2), write(2), etc. in their normal fashion, with the rmtops routines taking care of differentiating between local and remote files. This file should be included before including the file sys/stat.h, since it redefines the identifier ``stat'' which is used to declare objects of type struct stat.

The routines differentiate between local and remote file descriptors by adding a bias (currently 128) to the file descriptor of the pipe. The programmer, if he or she must know if a file is remote, should use isrmt().

ENVIRONMENT
The RCMD_CMD environment variable can be set to the name or pathname of a program to use, instead of /usr/bin/rsh, and must have the same calling conventions as rsh(1).

FILES
/usr/lib/librmt.a
    remote tape library

DIAGNOSTICS
Several of these routines will return -1 and set errno to EOPNOTSUPP, if they are given a remote file name or a file descriptor on an open remote file (e.g., rmtdup()).

SEE ALSO
rcp(1), rsh(1), rmt(8)

And the appropriate system calls in section 2.

AUTHORS
Jeff Lee wrote the original routines for accessing tape drives via rmt(8).

Fred Fish redid them into a general purpose library.

Arnold Robbins added the ability to specify a user name on the remote system, the rmt.h include file, this man page, cleaned up the library a little, and made the appropriate changes for 4.3BSD.

Dan Kegel contributed the code to use the rexec(3) library routine.

BUGS
There is no way to use remote tape drives with stdio(3), short of recompiling it entirely to use these routines.

The rmt(8) protocol is not very capable. In particular, it relies on TCP/IP sockets for error free transmission, and does no data validation of its own.