StringIO

Controls an IO device process that wraps a string.

A StringIO IO device can be passed as a "device" to most of the functions in the IO module.

Examples

iex> {:ok, pid} = StringIO.open("foo")
iex> IO.read(pid, 2)
"fo"

Summary

Functions

child_spec(init_arg)

Returns a specification to start this module under a supervisor.

close(pid)

Stops the IO device and returns the remaining input/output buffers.

contents(pid)

Returns the current input/output buffers for the given IO device.

flush(pid)

Flushes the output buffer and returns its current contents.

open(string, options_or_function \\ [])

Creates an IO device.

open(string, options, function)

Creates an IO device.

Functions

child_spec(init_arg)

Returns a specification to start this module under a supervisor.

See Supervisor.

close(pid)

close(pid()) :: {:ok, {binary(), binary()}}

Stops the IO device and returns the remaining input/output buffers.

Examples

iex> {:ok, pid} = StringIO.open("in")
iex> IO.write(pid, "out")
iex> StringIO.close(pid)
{:ok, {"in", "out"}}

contents(pid)

contents(pid()) :: {binary(), binary()}

Returns the current input/output buffers for the given IO device.

Examples

iex> {:ok, pid} = StringIO.open("in")
iex> IO.write(pid, "out")
iex> StringIO.contents(pid)
{"in", "out"}

flush(pid)

flush(pid()) :: binary()

Flushes the output buffer and returns its current contents.

Examples

iex> {:ok, pid} = StringIO.open("in")
iex> IO.write(pid, "out")
iex> StringIO.flush(pid)
"out"
iex> StringIO.contents(pid)
{"in", ""}

open(string, options_or_function \\ [])

open(binary(), keyword()) :: {:ok, pid()}
open(binary(), (pid() -> res)) :: {:ok, res} when res: var

Creates an IO device.

string will be the initial input of the newly created device.

options_or_function can be a keyword list of options or a function.

If options are provided, the result will be {:ok, pid}, returning the IO device created. The option :capture_prompt, when set to true, causes prompts (which are specified as arguments to IO.get* functions) to be included in the device's output.

If a function is provided, the device will be created and sent to the function. When the function returns, the device will be closed. The final result will be a tuple with :ok and the result of the function.

Examples

iex> {:ok, pid} = StringIO.open("foo")
iex> IO.gets(pid, ">")
"foo"
iex> StringIO.contents(pid)
{"", ""}

iex> {:ok, pid} = StringIO.open("foo", capture_prompt: true)
iex> IO.gets(pid, ">")
"foo"
iex> StringIO.contents(pid)
{"", ">"}

iex> StringIO.open("foo", fn pid ->
...>   input = IO.gets(pid, ">")
...>   IO.write(pid, "The input was #{input}")
...>   StringIO.contents(pid)
...> end)
{:ok, {"", "The input was foo"}}

open(string, options, function)

(since 1.7.0)
open(binary(), keyword(), (pid() -> res)) :: {:ok, res} when res: var

Creates an IO device.

string will be the initial input of the newly created device.

If the :capture_prompt option is set to true, prompts (specified as arguments to IO.get* functions) are captured in the output.

The device will be created and sent to the function given. When the function returns, the device will be closed. The final result will be a tuple with :ok and the result of the function.

Examples

iex> StringIO.open("foo", [], fn pid ->
...>   input = IO.gets(pid, ">")
...>   IO.write(pid, "The input was #{input}")
...>   StringIO.contents(pid)
...> end)
{:ok, {"", "The input was foo"}}

iex> StringIO.open("foo", [capture_prompt: true], fn pid ->
...>   input = IO.gets(pid, ">")
...>   IO.write(pid, "The input was #{input}")
...>   StringIO.contents(pid)
...> end)
{:ok, {"", ">The input was foo"}}

© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.8.2/StringIO.html