Class: MCMD::Mtemp

Inherits:
Object
  • Object
show all
Defined in:
lib/nysol/mtemp.rb

Overview

一時ファイル名を扱うクラス

メソッド:

file : 一時ファイル名を返すpath : 一時ファイル名を格納するパスを返すrm : 実行時点までに生成した一時ファイルを全て削除する。

例1


require 'mtools'

tmp=MCMD::Mtemp.new
fName1=tmp.file
fName2=tmp.file
fName3=tmp.file("./xxa")
puts fName1 # -> /tmp/__MTEMP_60637_2152301760_0
puts fName2 # -> /tmp/__MTEMP_60637_2152301760_1
puts fName3 # -> ./xxa
File.open(fName1,"w"){|fp| fp.puts "temp1"}
File.open(fName2,"w"){|fp| fp.puts "temp2"}
File.open(fName3,"w"){|fp| fp.puts "temp3"}
# tmpがローカルのスコープを外れると
# GCが発動するタイミングで一時ファイルも自動的に削除される。
# ただし、fName3は一時ファイル名を直接指定しているの削除されない。

例2:


require 'mtools'

# コンストラクタでパスを指定すると自動削除されない。
# (rmメソッドにより削除することはできる。)
tmp=MCMD::Mtemp.new(".")
fName=tmp.file
File.open(fName,"w"){|fp| fp.puts "temp"}
# tmpがローカルのスコープを外れGCが発動しても
# 一時ファイルは削除されない。

例3:


require 'mtools'

tmp=MCMD::Mtemp.new
pName=tmp.pipe
system("ls -l #{pName}") # この段階で名前付きパイプファイルが作成されている。

-> prw-r–r– 1 user group 0 7 19 12:20 /tmp/__MTEMP_60903_2152299720_0

system("echo 'abc' > #{pName} &") # バックグラウンド実行でnamed pipeに書き込み
system("cat <#{pName} &")         # バックグラウンド実行でnamed pipeから読み込み
# tmpがローカルのスコープを外れると
# GCが発動するタイミングで全ての一時ファイルは自動削除される。

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.callback(path, pid, oid) ⇒ Object



115
116
117
118
119
# File 'lib/nysol/mtemp.rb', line 115

def callback(path,pid,oid)
  lambda {
    delAllFiles(path,pid,oid)
  }
end

Instance Method Details

#file(name = nil) ⇒ Object

一時ファイル名の取得

返値: 一時ファイル名(String)

以下のフォーマットで一時ファイル名を生成する。@seqはカウントアップされる。フォーマット: “#@path/_MTEMP#@pid_#@oid_#@seq” nameが指定されれば(@path以外に)GCで削除しなくなる。



178
179
180
181
182
183
184
185
186
187
188
# File 'lib/nysol/mtemp.rb', line 178

def file(name=nil)
  # ファイル名の生成
  n=nil
  if name==nil then
    n="#{mkname}"
    @seq += 1
  else
    n=name
  end
  return n
end

#forceDel(save = false) ⇒ Object

ワークファイル強制削除##path



227
228
229
230
231
232
233
234
# File 'lib/nysol/mtemp.rb', line 227

def forceDel(save=false)
  Dir["#{@path}/__MTEMP_*"].each{|fn|
    if save then
      system("tar cvfzP #{fn}.tar.gz #{fn}")
    end
    system "rm -rf #{fn}"
  }
end

#pathObject

一時ファイルの出力パスの取得

返値: 一時ファイルを出力パス名(String)



215
216
217
# File 'lib/nysol/mtemp.rb', line 215

def path
  return @path
end

#pipe(name = nil) ⇒ Object

一時ファイル名(名前付きパイプ)の取得

返値: 一時ファイル名(String)

以下のフォーマットで名前付きパイプの一時ファイル名を生成する。@seqはカウントアップされる。フォーマット: “#@path/_MTEMP#@pid_#@oid_#@seq” nameが指定されれば(@path以外に)GCで削除しなくなる。



197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
# File 'lib/nysol/mtemp.rb', line 197

def pipe(name=nil)
  # ファイル名の生成
  n=nil
  if name==nil then
    n="#{mkname}"
    @seq += 1
  else
    n=name
  end

  # fifoファイル(名前付きパイプ)の作成
  system "mkfifo #{n}"

  return n
end

#rmObject

system “rm -rf ##path/_MTEMP#@pid_#@oid_*”



222
223
224
# File 'lib/nysol/mtemp.rb', line 222

def rm
  delAllFiles(@path,@pid,@oid)
end