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
)
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().
/usr/bin/rsh
,
and must have the same calling conventions as
rsh(1).
/usr/lib/librmt.a
)).
And the appropriate system calls in section 2.
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.
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.