二つのファイルが同一タイムスタンプで書かれたときにエラー発生

このQ&Aのポイント
  • 現在稼働中のシステムが突然ダウンし、二つのファイルが同一タイムスタンプで書かれた際にエラーが発生します。このエラーが発生する症状やタイムスタンプの発行タイミングについて確認しています。
  • エラーが発生する原因を調査中ですが、特別な変更は行われていません。ただ、同一プロセスの別スレッドで書き込んだ2つのファイルがミリ秒単位で同じタイムスタンプになっていることに気づきました。同じタイミングでファイルが書かれるとエラーが発生する場合について情報を探しています。
  • 再現テストを行いたいので、ミリ秒単位でタイムスタンプを揃えて2つのファイルを書く方法を探しています。OSはWindows2000SP4を使用しています。
回答を見る
  • ベストアンサー

二つのファイルが同一タイムスタンプで書かれたときにエラー発生

現在稼働中のシステムが、突然ダウンしました。 原因を調査しているのですが、特別変わったことがありません。 ただ、一つ気がついたのですが……このエラーは二つのファイルを書き込んだ直後に発生したのですが、その2つのファイルのタイムスタンプが、ミリ秒単位で全く同じなのです。(同じプロセスの別スレッドで書いています) それで質問なのですが 1. このように、全く同じタイミングでファイルが書かれるとエラーになる、というような症状を見聞きされた方はいらっしゃらないでしょうか。 2. タイムスタンプというのはどのタイミングで発行されるのでしょうか。(ファイルをクローズした瞬間、など) 3. 再現テストをしたいのですが、このように、ミリ秒単位でタイムスタンプを揃えて二つのファイルを書くような方法が何かあるでしょうか。 OSはWindows2000SP4です。 よろしくお願い致します。<(_ _)>

質問者が選んだベストアンサー

  • ベストアンサー
  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.1

もし質問者さんがお持ちの情報も本当にそれだけ(「突然ダウンした」という情報だけ)で藁にもすがるような状況なのだとすれば、OS側の問題(「ファイルへの同時書き込みによるエラー発生」)ではない別の藁を探されることを強くお勧めします。 1. 「ファイルに同時に書き込みを行うことでOSがエラーを発する」ということは、事実エラーが発生している場合を除いて、聞いたことがありません。 2. タイムスタンプはファイルを開いた時、ファイルを読み書きしたとき、ファイルを閉じたときに、それぞれ対応するものが更新されます。 3. ミリ秒とは現代のCPUにとっては永遠のように長い時間ですから、ミリ秒内に同じ処理を行うことは容易いでしょう。「ファイルを開く、ファイルに書き込む、ファイルを閉じる」の各処理を2ファイル分並べて書けば、その2ファイルへのファイル操作の時間間隔がミリ秒以内である可能性は非常に高いです。

annyGrace
質問者

お礼

ありがとうございます。やはり関係なかったようです。

関連するQ&A

  • .exeファイルの更新日時のタイムスタンプについて

    質問させていただきます。 .exeファイルをPCからSDカードなどのメディアに移動した場合、更新日時のタイムスタンプが1秒ずれます。 これはどういう理由からなのでしょうか? どのタイミングで移動を行っても、1秒遅れるので不思議です。 どなたかご存知の方が居られましたら、ご教示お願いいたします。

  • ファイルのタイムスタンプを取得する方法

    こんにちは。 WindowsNT4.0で、フォルダにあるファイルの タイムスタンプを秒まで取得したいのですが どのようにすればよいのでしょうか? dirコマンドだと時分しか出ないので困ってしまいました。 プログラミングが必要だとすれば、どのような コードをかけばよいのでしょうか? できればC言語で。 宜しくお願いいたします。

  • C# でファイルのタイムスタンプの比較

    C# でファイルのタイムスタンプの比較 public class FileList {  long size;  DateTime time;  string name;    : があり、このクラスのファイルを比較するメソッドcmpを作りました。 private int cmp(FileList f) {  return (   (f.size < this.size) ? -1 :   (f.size > this.size) ? 1 :   (f.time > this.time) ? -1 :   (f.time < this.time) ? 1 :   this.name.CompareTo(f.name)); } しかし、USBメモリにコピーしたファイルの中に、同一と判断されないファイルが出てしまいます。原因を調べたら、USBメモリにコピーするときにタイムスタンプが変更するためとわかりました。 http://support.microsoft.com/kb/402160/ja 「奇数秒に作成されたファイルを NTFS パーティションから FAT パーティションにコピーすると、作成日時の繰り上げが発生します。」という記載があり、原因はわかりました。 しかし、後半には、「NTFS ドライブと FAT ドライブ上のファイルのタイムスタンプを比較する場合は、この動作を考慮する必要があります。 」とだけ記載がありますが、具体的に、プログラムで、どのように考慮したらよいのかわかりません。「2秒以内なら同じとみなす」といった処理をすればよい事はわかりますが、ここで詰まっています。ご教示お願いします。

  • AIX6でファイルのタイムスタンプの秒を表示するコ

    linuxでは以下のコマンドで確認できました。 ls --full-time または ls -l --time-style=”+%Y/%m/%d %H:%M:%S” AIX6で同様のコマンドを実行してもエラーになります。 ls以外でもかまわないので、 ファイルのタイムスタンプを秒まで表示する方法がありましたら、 教えてください。

  • Linuxを入れたばかりなのにタイムスタンプが未来のファイルがある

    レッドハット8を再インストールして気づいたのですがタイムスタンプが未来のファイルがあるのです。 /etc/mail中の sendmail.cf virtusertable.db domaintable.db mailertable.db のタイムスタンプが9時間先になっています。 インストール直後まだ何もしてないのにいきなり未来のファイルがあるのです!? この他にもあるかも知れませんがとりあえず発見したのがこの4ファイルです。 何で気が付いたかといいますと sendmailを起動しようとしたら次のエラーメッセージが表示されたからです。 sendmailを起動中: make: *** 警告: ファイル `sendmail.cf' の修正時刻が未来の時刻です (2006-07-06 09:10:49 > 2006-07-06 00:39:24) make: 警告: クロックの歪みを検出。不完全なビルド結果になるかも知れません。 このあとsendmailは起動するのですが、何で未来のファイルがあるのか疑問です。 以前もsendmailを使用していましたが、こんなことは初めてです。 いったいこれは何なんでしょうか。 インストールのしかたがいけないのでしょうか。 ちゃんと、アジア/東京を選択したのですけどねぇ~。 BIOSの時計もさすがに9時間は進んでいませんでしたし・・・。 9時間先というのは、ちょうどグリニッジの時刻なのでしょうかねぇ~。 確かタイムスタンプを変更するコマンドがあったような気もしますが、 前はそんなことしなくても普通に起動できてたんです。 なぜだか原因わかる方いませんか。

  • time()関数

    Unix系でtime()関数を使うと現在時刻が1秒単位で取得出来ますが、ミリ秒単位で取得する方法ってありませんか?

  • csvファイル中に記載されたタイムスタンプ形式の変更

    csv形式ファイル中の文字列の変換で困っています。 時刻表示がどうやら以下のような意味で記入されているのですが、 000220152722 → 2000年2月20日15時27分22秒(日本時間) 020309215617 → 2002年3月9日21時56分17秒(日本時間) これをUNIXタイムスタンプ形式(1970年1月1日 00:00:00 GMTからの通算秒)に変換したいのですが、よいソフト又よい解決案があったら教えてください。何卒。

  • ファイルクローズ(fclose)でエラーを発生させる方法

    ソースには一切手を加えず、(5)ファイルのクローズでエラー表示させる方法はないでしょうか。 #include <stdio.h> #include <stdlib.h> int main(void) { FILE *fp; /* (1)ファイルポインタの宣言 */ char s[256]; /* (2)ファイルのオープン */ /* ここで、ファイルポインタを取得する */ if ((fp = fopen("smpl.txt", "r")) == NULL) { printf("file open error!!\n"); exit(EXIT_FAILURE); /* (3)エラーの場合は通常、異常終了する */ } /* (4)ファイルの読み(書き)*/ while (fgets(s, 256, fp) != NULL) { /* ここではfgets()により1行単位で読み出し */ printf("%s", s); } if((fclose(fp)) == EOF){ /* (5)ファイルのクローズ */ Logging(cfancname, 2); printf("ファイルクローズに失敗しました\n"); return -1; } return 0; } 宜しくお願いします。

  • fopenでのエラー

    こんばんわ、長田と申します。  現在WINNTserverのsp6で動作させるアプリを VC6作成しているのですが同一ファイルを一定周期(数秒)で オープン→ファイル処理→クローズと行っていると あるタイミングでファイルオープンエラーが発生してしまいます。  同一アプリケーションをWIN2000で動作させた場合は 発生しないのでOSに問題があるかと疑っている のですが、どなたかこのような現象に心当たりの ある方はいらっしゃらないでしょうか? ちなみに  ファイルオープンー>fopen()  ファイルクローズ->fclose() を使用しています。 宜しくお願いします。

  • ファイルopenエラーになってしまう。

    はじめまして。 今、open関数を使用してファイルをオープン(3秒に1回)しているのですが、一定周期でエラーになってしまいます。  周期:2時間7分 このファイルにIOをかけるのは、ここだけでcloseもちゃんとあります。openのリトライは3回(sleep(300))です。原因が全くわかりません。 どうか、宜しくお願いします。 (win2000 VC6.0)