09/05/15 21:02:24
次スレ立てろよカス
982:デフォルトの名無しさん
09/05/16 04:43:41
ruby1.8.6です。
ファイルアクセスが他のソフトとぶつかる場合で質問です。
Rubyで周期的にXMLファイルを上書きしていますが、この上書きのタイミングと
他のソフトによるXML読み込みが衝突した場合(と思われる時)、
in 'initialize': Permission denied - new XML.xml (Errno::EACCES)
というエラーメッセージが出ます。
そこでRubyの振る舞いとして、他のソフトがファイルアクセス中は上書きを延期するか、
あるいは別の方法で衝突を回避したく思います。
何か良い方法はありますでしょうか?
なお別のソフト側で衝突回避を試みましたが、上手くいかないためRubyに望みを
託すことにしました。
983:デフォルトの名無しさん
09/05/16 04:59:41
Rubyあんま関係ないな
ファイルロック(またはロックファイル)でぐぐれ
たいていの場合両方のソフトが対応してないといけないが、
たいていの場合相手のソフトはそんなもん作ってない
なお、直接
File.open(path,'w'){|f| f.write(data)}
するのではなく
File.open(path_v,'w'){|f| f.write(data)}
File.rename(path_v, path)
と、ファイル移動をOS任せにしたほうがファイル書き込みアクセス衝突の可能性自体は減る
ただし、これだと rename でファイルを掴むまでに起こったディスク上の変更を検知できない
このへんの衝突可能性に気を遣ってるソフトはあらゆる永続的データ保存に「別名保存→名前変更」のプロセスを使ってるので
そのソフトの使ってる別名保存名がわかればもしかしたらロックファイルのように使えるかもしれない
984:デフォルトの名無しさん
09/05/16 09:47:20
Rubyで次のコードが何故かできません。
超初心者です。
URLリンク(codepad.org)
985:デフォルトの名無しさん
09/05/16 09:54:12
>>984
Rubyに関するまとまった初心者向けの解説サイトまたは書籍を通読しろ
単に基礎知識が足りない
986:デフォルトの名無しさん
09/05/16 09:57:09
わかりました。ありがとうございます。
987:デフォルトの名無しさん
09/05/16 09:57:16
Rubyだけに関する知識じゃなくて、
もっと一般的にプログラミングで使用される基礎的な概念に関する知識だな。
988:デフォルトの名無しさん
09/05/16 10:03:46
>>984
グローバル変数は $x と書く。
989:デフォルトの名無しさん
09/05/16 10:11:32
Ruby 初心者スレッド Part 28
スレリンク(tech板)
990:デフォルトの名無しさん
09/05/16 10:13:56
999
991:デフォルトの名無しさん
09/05/16 10:15:22
1000!
992:デフォルトの名無しさん
09/05/16 10:57:49
いやそこまでギリギリじゃないから
993:デフォルトの名無しさん
09/05/16 11:17:41
あれw
1000!にだまされた
994:デフォルトの名無しさん
09/05/16 13:57:06
1000なら今年Ruby2.0
995:デフォルトの名無しさん
09/05/16 14:02:46
こんなスローなスレでそんなことしてもw
996:デフォルトの名無しさん
09/05/16 14:08:34
1000ならRubyは俺のもの
997:デフォルトの名無しさん
09/05/16 14:15:50
エッチでリッチなかーちゃん、Rubyをせしめてフランスへ。
998:デフォルトの名無しさん
09/05/16 14:38:42
とうきょう ルビルビ リズム ルビルビ
心ズキズキわくわくー
999:デフォルトの名無しさん
09/05/16 16:00:01
>>1000なら今のシステムをSinatraで置き換える
1000:デフォルトの名無しさん
09/05/16 16:02:22
10^3
1001:1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。