filesystem/stream_redirection_no_parens.rb

tests/_examples/filesystem/stream_redirection_no_parens.rb in the metorex repository.

# A stream points at another place without changing the number the operating
# system holds it under.
require "fcntl"

reader, writer = IO.pipe
p reader.fcntl(Fcntl::F_GETFD) & Fcntl::FD_CLOEXEC
reader.close_on_exec = true
p reader.fcntl(Fcntl::F_GETFD) & Fcntl::FD_CLOEXEC
reader.close
writer.close

first = File.join(Dir.tmpdir, "metorex_stream_first_no_parens.txt")
second = File.join(Dir.tmpdir, "metorex_stream_second_no_parens.txt")
File.write(first, "from the first\n")
File.write(second, "from the second\n")

handle = File.new(first, "r")
p handle.read
handle.reopen(second, "r")
p File.basename(handle.path).sub("_no_parens", "")
p handle.read
handle.close

# `puts` hands its arguments to $stdout, which an Array reaches one line at a
# time.
puts [1, [2, 3]]
puts nil

held = spawn("exit 0")
p held.is_a?(Integer)
Process.wait(held)

File.delete(first)
File.delete(second)

Output:

1
1
"from the first\n"
"metorex_stream_second.txt"
"from the second\n"
1
2
3

true