- 33 名前:デフォルトの名無しさん mailto:あげさせて [2005/11/12(土) 22:57:52 ]
- // TEMPファイルを作成する関数の様なもの。このままスレッドで使うとバグる。
char * create_unique_file(char *file) { FILE *fp; if(NULL != (fp = fopen(file, "rb"))) { // 同名のファイルが既に存在する。 fclose(fp); // ※ここで違うファイル名を生成する処理を行う。 } else { // 同名のファイルが存在しないのでそのままのファイル名でファイルを作成する。 if(NULL != (fp = fopen(file, "wb"))) { // ここにきてほしい。 fclose(fp); return file; } else { // なぜかここにくる場合がある。errno:13(EACCES) } } return NULL; } // 上の関数をマルチスレッドで使うために若干のセーフティーを加えてみた。 void funk(char *file) { EnterCriticalSection(&cs); create_unique_file(file); Sleep(100);// これをコメントアウトするとバグる(時間が短いとバグりやすい?)。 LeaveCriticalSection(&cs); } // 上側の関数をマルチスレッドプログラム(HTTPDもどき)で使用していたところなぜかバグります。 // ・"wb"が失敗する。及び、プログラム全体のファイル送信がおかしくなる。 // 下側の関数のようにしたところ、 // ・Sleep(50〜)を入れると両方のバグが(見た目)出なくなる。 // fopen()が極短時間で重なっておかしくなっているのではないかと思っています。 // どうなんでしょうか・・・
|

|