

fopenを使用してログファイルへ書き込み時に、errno=13 Permission denied のエラーがまれに発生するときがあります。
ログファイルは、1ログを書く毎に、その都度、オープン/クローズしています。fopenの第二引数は"a+t"を指定しています。(テキストモード追加書き込み。+を指定している理由は、更新は行いませんが、Ctrl-Zの削除の為、+を指定することがマイクロソフトにより推奨されているため)
もちろん、このログファイル(ディレクトリ含む)への書き込み権限がないということは、ありません。(あれば必ず発生しますので)
従って一時的に、書き込み不能となる状態が発生していると考えられます。エラーが発生した後も、一定の時間が経過した後には書き込めるようになります。
このような事象に遭遇したことのあるかたが、おりましたら、その旨回答下さい。又、解決方法(このような事態をさける方法)をご存じのかたがおりましたら、教えて下さい。
実行環境
Windows2003-server
開発環境
Visual Studio .NET 2003のC++による開発(コードの内容は実質的にC言語を使用、MFCは使用していません)
No.3ベストアンサー
- 回答日時:
> fopenの場合、errnoにエラー内容が設定されると理解しています。
> GetLastErrorは、WindowsのAPIを呼び出した場合の使用するものと理解しておりました、
> fopenでエラーが発生した場合でも、GetLastErrorはそのエラーに
> マッチしたエラーコードを返してくれるのでしょうか。
仕様として保証されているわけではありませんが,
Windows 用の標準Cライブラリは Windows API を呼び出すものもありますから,
そこでエラーが発生していれば事実上その情報が得られるので原因究明には役立ちます.
fopen() は CreateFile() を呼び出しているので,
その中で失敗していれば事実上 GetLastError() でエラー情報が得られます.
(fopen() の第2引数が間違っているなど,CreateFile() 以外の原因ならばダメですが.)
この回答への補足
今までの回答ありがとうございました。
これから外出しますので、お礼は夜になりますが、なにか気づいた点があれば、ご指摘をお願いします。
>fopen() は CreateFile() を呼び出しているので,
>その中で失敗していれば事実上 GetLastError() でエラー情報が得られます.
貴重な情報をありがとうございました。試してみます。
No.2
- 回答日時:
#1 さんがおっしゃるように fclose() が失敗している可能性があるので,
その戻り値もチェックした方がいいと思います.
あと,Windows ということなので,errno だけでなく GetLastError() も
チェックした方がもう少し詳しいエラー原因がわかるかも.
回答ありがとうございます。
>#1 さんがおっしゃるように fclose() が失敗している可能性があるので,その戻り値もチェックした方がいいと思います.
戻り値は、チェックしております。
エラーがあった場合、別途エラーが、別経路ででますので、この可能性は排除しています。
>あと,Windows ということなので,errno だけでなく GetLastError() もチェックした方がもう少し詳しいエラー原因がわかるかも.
fopenの場合、errnoにエラー内容が設定されると理解しています。
GetLastErrorは、WindowsのAPIを呼び出した場合の使用するものと理解しておりました、fopenでエラーが発生した場合でも、GetLastErrorはそのエラーにマッチしたエラーコードを返してくれるのでしょうか。
No.1
- 回答日時:
ログファイルをいちいちオープンクローズしているということは
何かしらのタイミングで、クローズに失敗していて
そのファイルにロックがかかっている状態だと考えられます。
または、クローズしたけど、タイミングが悪くてその時はロックされていたという事も考えられます。
こういう時は何回もトレースして状況を把握するしかないですね。
回答ありがとうございます。
>何かしらのタイミングで、クローズに失敗していて
>そのファイルにロックがかかっている状態だと考えられます。
>または、クローズしたけど、タイミングが悪くてその時はロックされていたという事も考えられます。
現在、このエラーが発生しているプロセスは、非常中プロセスで、このプロセスが、このプロセス専用のログファイルをオープンした時に、このエラーが発生しています。従って、クローズエラーであっても、プロセス自体が終了しますので、ログファイルがロックされることはないと考えておりました。
しかしながら、全く第三者によってロックされる可能性もありえますので(本来あってはならないのですが)、その点を検討してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 Windows Updateが動作しません 7 2022/08/12 16:26
- 電子マネー・電子決済 QUICPayの登録ができない。 4 2023/06/10 10:57
- プリンタ・スキャナー キャノンmp490プリンター【エラー番号5400】で【プリンタートラブルが発生しました。電源を入れ直 2 2023/07/24 17:45
- その他(開発・運用・管理) WindowsからSSHでサーバーにあるファイルをダウンロードできない…。 3 2022/04/24 11:08
- Windows 10 再起動後 Pinが使用できず、PC(windows11)にサインインできない 3 2022/08/30 20:53
- 大学・短大 大学一年生です レポートについて質問します レポートを制作しているのですが 教科書から全てを引用した 1 2023/06/02 03:21
- 訴訟・裁判 通っていた塾に訴えられそうだった者です。 下記の内容をGoogleのクチコミに書き込むのは名誉毀損( 1 2023/06/25 00:03
- 訴訟・裁判 通っていた塾に訴えられそうでした。 そこで下記の内容をGoogleのクチコミに書き込むのは名誉毀損( 6 2023/06/25 00:25
- iOS HDD交換修理したWindows10・PCのOFFICE プロダクトキーがエラーとなる 2 2023/04/01 02:17
- 訴訟・裁判 以前通っていたやばい塾のGoogleのクチコミに下記の内容を書き込みたいのですが、名誉毀損にあたるか 1 2023/06/24 22:03
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
winsock通信時エラーの回避
-
イベントID 2002について
-
ADSIについて
-
FileCopy時のエラー
-
VB6+SQLServer2005 DBの新規作成
-
オブジェクト生成エラー
-
C# try-catch でcatchに飛ばす方法
-
VB6でRDOに接続できない
-
sshクライアントで接続先で開い...
-
ネットワーク上のPCのIPとホス...
-
ASPでテキストファイルにデータ...
-
押下ボタンによってSubmit先を...
-
IEからクライアントのEXCELのオ...
-
誰かVisualBasicのデータフォー...
-
vbscriptの変数宣言
-
SUBMITボタンで値を渡す時、次...
-
DropDownListの表示に列連結し...
-
ASPからファイルダウンロード
-
式はメソッドではありませんと...
-
UpdatePanel と GridViewについ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# try-catch でcatchに飛ばす方法
-
CreateObject("Excel.Applicati...
-
EXECLマクロでshapeがグルーフ...
-
FileCopy時のエラー
-
エラー 'ASP 0115' について
-
オーバーフローが発生します
-
IIS7.5の設定の仕方
-
winsock通信時エラーの回避
-
このページの状態情報は無効で...
-
Outlookで添付ファイルの有無を...
-
ASP 0x80004005 クライアント...
-
エラー 'ASP 0115'
-
ADSIについて
-
oracleを利用できません。(glob...
-
オラクル接続をopenしようとす...
-
ASP.NET C# ローカルのパスが呼...
-
FireFoxで開けないサイト
-
オブジェクト生成エラー
-
CAsyncSocket::Create()がエラ
-
ASP.NETで使用しているJavascri...
おすすめ情報