[ruby-de] file descriptors

Robert Klemme shortcutter at googlemail.com
Do Apr 20 23:21:32 JST 2017


2017-04-20 1:40 GMT+02:00 Norbert Melzer <timmelzer at gmail.com>:
> Die Optimisten <inform at die-optimisten.net> schrieb am Do., 20. Apr. 2017 um
> 00:52 Uhr:
>
>> Wie dupliziere ich einen File-Descriptor, zB um alle out.puts auf
>> Konsole _und_ in eine Datei zu bekommen?
>
>
> Ein File-Descriptor zeigt genau auf eine Datei, da kann man nichts dran
> ändern. Auf Shell-Ebene gibt es dazu zum Beispiel `tee`, welches stdin
> nimmt und in eine Datei schreibt und zusätzlich wieder auf stdin ausgibt.
>
> Wenn du also möchtest, dass ein einzelner Aufruf einer Ausgabemethode, zB
> Logging, auf mehrere Ziele verteilt wird, dann wirst du das in der Methode
> selber machen müssen.

Eine OO-Lösung wäre eine Klasse mit der Schnittstelle von IO zu bauen,
die dann in den Ausgabemethoden an mehrere IO-Instanzen delegiert.
Sowas wie,

class OutputProxy
  def initialize(ios)
    @ios = ios
  end

  def puts(*args)
    @ios.each {|io| io.puts(*args)}
    nil
  end

  ...
  def close
    @ios.each &:close
    nil
  end
end

Eine Instanz davon kann man dann (fast) überall verwenden, wo man
vorher ein File- oder IO-Objekt genutzt hat.

Ciao

robert

-- 
[guy, jim, charlie].each {|him| remember.him do |as, often| as.you_can
- without end}
http://blog.rubybestpractices.com/


Mehr Informationen über die Mailingliste ruby-de