From 3e09ac0c10c95bb24a08af62393b4f761e2743d0 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 24 Aug 2013 09:54:45 +0000 Subject: initial commit --- lib/dtas/pipe.rb | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 lib/dtas/pipe.rb (limited to 'lib/dtas/pipe.rb') diff --git a/lib/dtas/pipe.rb b/lib/dtas/pipe.rb new file mode 100644 index 0000000..891e9cd --- /dev/null +++ b/lib/dtas/pipe.rb @@ -0,0 +1,40 @@ +# -*- encoding: binary -*- +# :stopdoc: +# Copyright (C) 2013, Eric Wong +# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt) +begin + require 'io/splice' +rescue LoadError +end +require_relative '../dtas' +require_relative 'writable_iter' + +class DTAS::Pipe < IO + include DTAS::WritableIter + attr_accessor :sink + + def self.new + _, w = rv = pipe + w.writable_iter_init + rv + end + + # create no-op methods for non-Linux + unless method_defined?(:pipe_size=) + def pipe_size=(_) + end + + def pipe_size + end + end +end + +# for non-blocking sinks, this avoids extra fcntl(..., F_GETFL) syscalls +# We don't need fcntl at all for splice/tee in Linux +# For non-Linux, we write_nonblock/read_nonblock already call fcntl() +# behind our backs, so there's no need to repeat it. +class DTAS::PipeNB < DTAS::Pipe + def nonblock? + true + end +end -- cgit v1.2.3-24-ge0c7