Skip to main content

Module cli_utils

Module cli_utils 

Source
Expand description

Tools for handling reading and writing from the standard I/O/E.

Per this stackoverflow discussion. Note:

  Piped commands run concurrently. When you run ps | grep …, it's the luck of the draw (or a matter of details of the workings of the shell combined with scheduler fine-tuning deep in the bowels of the kernel) as to whether ps or grep starts first, and in any case they continue to execute concurrently.

  This is very commonly used to allow the second program to process data as it comes out from the first program, before the first program has completed its operation. For example

  grep pattern very-large-file | tr a-z A-Z
  begins to display the matching lines in uppercase even before grep has finished traversing the large file.

  grep pattern very-large-file | head -n 1
  displays the first matching line, and may stop processing well before grep has finished reading its input file.

  If you read somewhere that piped programs run in sequence, flee this document. Piped programs run concurrently and always have.

I bring the note above because that was my original understanding, but I have had to spend a crazy amount of time trying to get data flowing from one process to another without the initial process first exiting.

Constants§

BUFFER_CHUNK_SIZE
BUFFER_SIZE

Functions§

print_license_notice
read_some_stdin
Consumes the incoming buffer in chunks of BUFFER_CHUNK_SIZE bytes size.
read_stdin
Consumes the incoming buffer in chunks of BUFFER_CHUNK_SIZE bytes size until no more bytes are present.
write_stdout
Writes RUMBuffer to stdout.
write_string_stdout
writes [stringview] to stdout.

Type Aliases§

BufferChunk
BufferSlice