RMTOPEN(3L)
π RMTOPEN(3L) β the remote tape server girlies' handbook π
okay so this is the RMTOPEN(3L) page from SchilyΒ΄s LIBRARY FUNCTIONS, and bestie, it's literally the whole librmt fam β rmtopen, rmtclose, rmtread, rmtwrite, rmtseek, rmtioctl β all about operating on a connection to a remote tape server (-lrmt). let's get into it π
β¨ NAME β¨
rmtopen, rmtclose, rmtread, rmtwrite, rmtseek, rmtioctl β operate on a connection to a remote tape server (-lrmt) π¦
πΈ SYNOPSIS πΈ
#include <schily/librmt.h>
#include <schily/rmtio.h>
int rmtopen(int remfd, char *pathname, int fmode);
int rmtclose(int remfd);
int rmtread(int remfd, char *buf, int count);
int rmtwrite(int remfd, char *buf, int count);
int rmtseek(int remfd, off_t offset, int whence);
int rmtioctl(int remfd, int cmd, int count);
π DESCRIPTION π
so like, every single one of these takes remfd, which is a file descriptor you already got from a call to rmtgetconn(3). no remfd, no vibes. π
rmtopen()
sends an open request to the remote server, no cap.
remfdβ a file descriptor previously obtained from a call tormtgetconn(3).pathnameβ the path to be opened on the server side.fmodeβ the same as the third argument foropen(2).
now here's the tea β: if the remote server does not support the GNU open flag enhancements, only the lowest two bits in the open flags can be send to the remote server. that's just how it is, bestie.
if the open request succeeds, rmtopen(3) takes care of telling the remote side to switch to RMT protocol VERSION 1 π
rmtclose()
sends a close request to the remote server. remfd is a file descriptor previously obtained from a call to rmtgetconn(3). short and sweet, we love a low-effort icon β¨
rmtread()
sends a read request to the remote server. remfd is a file descriptor previously obtained from a call to rmtgetconn(3). the other parameters are the same as for a local read(2) call. and heads up β rmtread(3) will fail if there was no previous successful rmtopen(3) before. so like, open first, read second. in that order. π
rmtwrite()
sends a write request to the remote server. remfd is a file descriptor previously obtained from a call to rmtgetconn(3). the other parameters are the same as for a local write(2) call. same rule: rmtwrite(3) will fail if there was no previous successful rmtopen(3) before. π
rmtseek()
sends a seek request to the remote server. remfd is a file descriptor previously obtained from a call to rmtgetconn(3). the other parameters are the same as for a local lseek(2) call. and yeah, rmtseek(3) will fail if there was no previous successful rmtopen(3) before. it's giving "we have a system," and honestly? respect π«Ά
rmtioctl()
sends a MTIOCTOP request to the remote server. cmd and count are the values that should be filled into struct mtop. see mtio(4) for more information. iykyk π
π RETURN VALUES π
rmtopen()β returns a value>= 0if the remote open succeeds.rmtclose()β returns a value>= 0if the remote close succeeds.rmtread()β returns the return value obtained the remoteread(2)request.rmtwrite()β returns the return value obtained by the remotewrite(2)request.rmtseek()β returns the return value obtained by the remotelseek(2)request.rmtioctl()β returns the return value obtained by the remoteioctl(f, MTIOCTOP, struct mtop *)call.
β ERRORS β
all functions return -1 on error and set errno to the errno value retrieved from the remote server. so the error is technically not from around here, it's visiting from the remote side π
π¦ EXAMPLES π¦
int remfd;
char *remfn;
char host[256];
int iosize = 10240; /* socket send/receive size to set up */
if ((remfn = rmtfilename(filename)) != NULL) {
rmthostname(host, sizeof (host), filename);
if ((remfd = rmtgetconn(host, iosize, 0)) < 0)
comerrno(EX_BAD, "Cannot get connection to '%s'.\n",
/* errno not valid !! */ host);
}
if (rmtopen(remfd, remfn, mode) < 0)
comerr("Cannot open '%s'.\n", remfn);
if (rmtread(remfd, buf, sizeof(buf)) < 0)
comerr("Read error on '%s'.\n", remfn);
rmtclose(remfd);
π SEE ALSO π
rmt(1), rsh(1), ssh(1), rcmd(3), rmtinit(3), rmtdebug(3), rmtrmt(3), rmtrsh(3), rmthostname(3), rmtfilename(3), rmtgetconn(3), rmtopen(3), rmtioctl(3), rmtclose(3), rmtread(3), rmtwrite(3), rmtseek(3), rmtxstatus(3), rmtstatus(3), _mtg2rmtg(3), _rmtg2mtg(3), errmsgno(3), mtio(4)
π₯ NOTES π₯
okay, storytime, because this part matters π
- while all other known rmt implementations limit the size of a single rmt command to 64 bytes, this implementation limits all standard command lines to 80 bytes and the file name to 4096 bytes. we're built different π
- note that this may cause problems if the remote rmt server implementation is directly derived from the historic BSD server code. this is true for all BSD systems, for SunOS up to 5.9 and even for the GNU rmt server. π
- as some of the other rmt servers do not even implement bound checking, be prepared that other server implementations may dump core or at least stop honoring the rmt protocol. like, actually be prepared. this is your warning. π¨
- if you like to use long file names, make sure that you also use the schily rmt server. no cap, that's the move π«Ά
π BUGS π
if local and remote errno values do not match, programs may get confused. same, honestly π
mail other bugs and suggestions to schilytools@mlists.in-berlin.de or open a ticket at https://codeberg.org/schilytools/schilytools/issues.
the mailing list archive may be found at:
https://mlists.in-berlin.de/mailman/listinfo/schilytools-mlists.in-berlin.de.
πΈ AUTHOR πΈ
librmt has been written in 1990 by Joerg Schilling. in 1995, support for RMT VERSION 1 has been added. librmt is now maintained by the schilytools project authors. a legacy icon, honestly π
π SOURCE DOWNLOAD π
the source code for librmt is included in the schilytools project and may be retrieved from the schilytools project at Codeberg at
https://codeberg.org/schilytools/schilytools.
the download directory is
https://codeberg.org/schilytools/schilytools/releases.
and that's the whole page, bestie! this one's signed off by Joerg Schilling, dated 2022/10/06, and it lands on the RMTOPEN(3L) page of SchilyΒ΄s LIBRARY FUNCTIONS β go forth and open your remote tapes responsibly πβ¨π
π¦ where this page comes from
- opensuse-leap 16.0: librmt-devel-doc 2022.10.16-160000.2.2 Β· CDDL-1.0
- Copyright 2002 J. Schilling
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms