bonsix/docs/dj.1

162 lines
4.7 KiB
Groff
Raw Normal View History

.\" Copyright (c) 2024 DTB <trinity@trinity.moe>
.\" Copyright (c) 2024 Emma Tebibyte <emma@tebibyte.media>
.\"
.\" This work is licensed under CC BY-SA 4.0. To see a copy of this license,
.\" visit <http://creativecommons.org/licenses/by-sa/4.0/>.
.\"
2024-06-29 05:55:29 -06:00
.TH DJ 1 2024-06-29 "Harakit X.X.X"
.SH NAME
dj \(en disk jockey
.\"
.SH SYNOPSIS
2024-06-03 23:07:19 -06:00
dj
.RB ( -Hn )
.RB ( -a
.RB [ byte ])
.RB ( -c
.RB [ count ])
.RB ( -i
[\fBinput file\fP])
.RB ( -b
[\fBinput block size\fP])
.RB ( -s
[\fBinput offset\fP])
.RB ( -o
[\fBoutput file\fP])
.RB ( -B
[\fBoutput block size\fP])
.RB ( -S
[\fBoutput offset\fP])
.\"
.SH DESCRIPTION
Perform precise read and write operations on files. This utility is useful for
2024-06-17 23:36:52 -06:00
reading and writing binary data to and from disks.
This manual page uses the terms \(lqskip\(rq and \(lqseek\(rq to refer to moving
to a specified byte by index in the input and output of the program
respectively. This language is inherited from the
.BR dd (1p)
2024-06-17 23:36:52 -06:00
utility and used here to decrease ambiguity.
2024-06-05 17:18:21 -06:00
When seeking or skipping to a byte, writing or reading starts at the byte
immediately subsequent to the specified byte.
.\"
2024-03-26 23:58:00 -06:00
.SH OPTIONS
2024-06-03 23:07:19 -06:00
.IP \fB-i\fP
2024-05-24 10:03:52 -06:00
Takes a file path as an argument and opens it for use as an input.
.IP \fB-b\fP
2024-06-17 23:36:52 -06:00
Takes a numeric argument as the size in bytes of the input buffer, the default
being 1024.
.IP \fB-s\fP
2024-06-29 19:14:08 -06:00
Takes a numeric argument as the index of the byte at which reading will
commence; \(lqskips\(rq that number of bytes. If the standard input is used,
bytes read to this point are discarded.
.IP \fB-o\fP
2024-05-24 10:06:15 -06:00
Takes a file path as an argument and opens it for use as an output.
.IP \fB-B\fP
Does the same as
.B -b
but for the output buffer.
.IP \fB-S\fP
2024-06-29 19:14:08 -06:00
Takes a numeric argument as the index of the byte at which writing will
commence; \(lqseeks\(rq that number of bytes. If the standard output is used,
null characters are printed.
.IP \fB-a\fP
2024-06-17 23:36:52 -06:00
Accepts a single literal byte with which the input buffer is padded in the event
of an incomplete read from the input file. If the option argument is empty, the
null byte is used.
.IP \fB-c\fP
2024-06-17 23:36:52 -06:00
Specifies a number of reads to make. The default is 0, in which case the
input is read until a partial or empty read is made.
.IP \fB-H\fP
2024-06-29 05:55:29 -06:00
Prints diagnostic messages in a human-readable manner as described in the
2024-06-17 23:36:52 -06:00
DIAGNOSTICS section.
.IP \fB-n\fP
2024-06-17 23:36:52 -06:00
Retries failed reads once before exiting.
.\"
2024-03-27 00:08:43 -06:00
.SH STANDARD INPUT
2024-06-03 23:07:19 -06:00
The standard input shall be used as an input if no inputs are specified or if
2024-06-29 19:14:08 -06:00
input file is \(lq-\(rq.
.\"
2024-06-17 23:36:52 -06:00
.SH STANDARD OUTPUT
The standard output shall be used as an output if no inputs are specified or if
2024-06-29 19:14:08 -06:00
the output file is \(lq-\(rq.
2024-06-17 23:36:52 -06:00
.\"
.SH DIAGNOSTICS
2024-06-03 23:07:19 -06:00
2024-06-29 05:55:29 -06:00
On a partial or empty read, a diagnostic message is printed. Then, the program
exits unless the
.B -n
2024-06-17 23:36:52 -06:00
option is specified.
2024-06-03 23:07:19 -06:00
2024-05-24 10:21:06 -06:00
By default, statistics are printed for input and output to the standard error in
the following format:
.RS
{records read} {ASCII unit separator} {partial records read}
{ASCII record separator} {records written} {ASCII unit separator}
{partial records written} {ASCII group separator} {bytes read}
{ASCII record separator} {bytes written} {ASCII file separator}
.RE
2024-04-18 08:44:44 -06:00
This format for diagnostic output is designed to be machine-parseable for
convenience. For a more human-readable format, the
.B -H
2024-04-18 08:44:44 -06:00
option may be specified. In this event, the following format is used instead:
.RS
{records read} '+' {partial records read} '>' {records written}
'+' {partial records written} ';' {bytes read} '>' {bytes written}
{ASCII line feed}
.RE
In non-recoverable errors that don\(cqt pertain to the read-write cycle, a
diagnostic message is printed and the program exits with the appropriate
2024-06-05 20:39:37 -06:00
.BR sysexits.h (3)
status.
.\"
.SH BUGS
2024-06-03 23:07:19 -06:00
If
.B -n
2024-05-24 10:21:06 -06:00
is specified along with the
.B -c
2024-06-17 23:36:52 -06:00
option and a count, actual byte output is the product of the count and the input
block size and therefore may be lower than expected. If the
.B -a
2024-06-29 19:14:08 -06:00
option is specified, this could make written data nonsensical.
.\"
2024-03-27 00:08:43 -06:00
.SH CAVEATS
2024-06-03 23:07:19 -06:00
2024-03-27 00:14:02 -06:00
Existing files are not truncated on ouput and are instead overwritten.
2024-03-27 00:08:43 -06:00
2024-05-24 10:21:06 -06:00
Many lowercase options have capitalized variants and vice-versa which can be
confusing. Capitalized options tend to affect output or are more intense
versions of lowercase options.
.\"
.SH RATIONALE
2024-06-03 23:07:19 -06:00
This program was based on the
.BR dd (1p)
utility as specified in POSIX. While character conversion may have been the
original intent of
.BR dd (1p),
it is irrelevant to its modern use. Because of this, this program eschews
character conversion and adds typical option formatting, allowing seeks to be
specified in bytes rather than in blocks, allowing arbitrary bytes as padding,
and printing in a format that\(cqs easy for machines to parse.
.\"
.SH COPYRIGHT
2024-06-03 23:07:19 -06:00
Copyright \(co 2023 DTB. License AGPLv3+: GNU AGPL version 3 or later
<https://gnu.org/licenses/agpl.html>.
.\"
.SH SEE ALSO
.BR dd (1p)