アプリ版:「スタンプのみでお礼する」機能のリリースについて

Windows 7 + Active perlで何か書き込んでいる時にアップデートなどでPCを再起動すると、書き込んでいるテキストファイル(1KB~10MB程度)が壊れることがある様な気がします。あまり再現性が無くこれとは限らないのですが、時々真っ白のファイルができています。
かといって、全てのperlプログラムが書き込み状態にあるか否かを把握するのも面倒です。そもそも、条件に応じて書き込みしているため不定期でいつ書き込んでいるかもよく分かりません。
個人利用のため、その時に取得したデータが少し壊れる程度は諦めが付くのですが、大量に蓄積したデータまで破損するのは辛く避けたいです。
できれば簡易な方法でファイルが壊れないようにする方法はありますか?
殆ど使ったことが無くこういった雑な使い方でも良いのか分かりませんがSQLなど使うと良いのでしょうか?

A 回答 (4件)

・Perlで出力命令を実行した( print 等を実行した)


ということと
・実際にファイルにデータが書き込まれる
ということは、必ずしも一致しません。

ディスクへのアクセスは、コンピュータ内部のアクセス(メモリ等)に比べて、桁違いに時間がかかります。
そのため、その時間を有効に使うために、いろんな工夫をしています。
例えば、毎回書き込まずに内容をメモリに保存しておいて、後でまとめて書き込む、等。

通常、プログラムが正常に動作すると、ファイルへの書き込みも正常に完了します。
ですが、シャットダウンのような強制終了になると、ファイルの書き込みが完了しないこともあります。
管理情報の書き込みにしっぱいして、ファイルサイズが0になることも有り得るでしょう。


対策は、そのような自体でもファイル保存が完了するようにすることです。
○ UNIX系OSでは、trap を使って強制終了を検知する、というのがあります。
 Windowsではどうなるか、確認していません
○ファイルを小まめの open/ close したり flush することで、ファイルに強制的に書き込む
○データベースや、Windowsのログサービス等、確実に保存されるようなものを使う
    • good
    • 0
この回答へのお礼

回答いただきありがとうございます。
Unixなどレンタルサーバ以外ではお目にかからないのですが、その割にWindowsの情報が無く困っています。Perl動作中に右上の×をクリックしたら多分ダメですよね・・・
あまりこまめにすると、たくさんのプログラムが同時に動いている場合、再起動のタイミングで比かかる可能性が高くなり、これはあまり良くないと思っています。かといって、メモリを使う方法についても立ち上げソフトが増えるとやはり再起動で消失する可能性が高くなりますしなやむところです。
データベースを使うもの(MySQLなど)であれば、仮に書き込み中に、Windowsを再起動しても大丈夫なのでしょうか?

お礼日時:2017/04/30 12:07

perlからは一時ファイルに書き込みを行い、書き込みが終わった時点で本ファイルを削除→一時ファイルをリネームなど

    • good
    • 0
この回答へのお礼

回答いただきありがとうございます。
そう言えば、昔掲示板を作っていた頃、こういった方法をやっていました。クライアントどうさせる場合にも有効そうですね。

お礼日時:2017/04/30 12:03

有馬のPCは


勝手に起動して勝手に終了する。

どうやら、電源部がイカレタラシイ。(ーー;)
始めはウィルスと思ったが違った。(>_<)
「[perl] perlで書き込み中に、P」の回答画像2
    • good
    • 0

HDD交換してはどうか?


今のHDDは外部ユニットを組んで新しいHDDに必要ファイルを移してから
フォーマット。再利用。で良いと思うのだが?(^。^)y-.。o○

写真の複合機はエプソンが8年目くらいに止まる様にしてあるそうだ。
先代の複合機も8年くらいで使えなくなった。
詐欺会社エプソン!(-_-)/~~~ピシー!ピシー!

気に入らないのでキャノンの一番安いプリンターにした。

始めはコンビニのマルチコピーでプリンターとスキャナー代わりをしようとしたのだが
上手く行かずスキャナーだけの利用となった。
「[perl] perlで書き込み中に、P」の回答画像1
    • good
    • 0
この回答へのお礼

回答いただきありがとうございます。
ハードウェアの問題はないように思っています。

お礼日時:2017/04/23 23:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!