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も見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
fopne で失敗する原因
C言語・C++・C#
-
fopen() がたまにNULLを返す
C言語・C++・C#
-
fcloseで発生するエラーについて。
C言語・C++・C#
-
-
4
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
5
ファイルopenエラーになってしまう。
C言語・C++・C#
-
6
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
7
C言語のfopenについて教えてください。
C言語・C++・C#
-
8
VC++で文字列から任意の文字を削除するにはどうしたらいいですか?
C言語・C++・C#
-
9
C言語で構造体のメンバを簡単に出力する方法ありますか?
C言語・C++・C#
-
10
ファイルクローズ(fclose)でエラーを発生させる方法
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C# try-catch でcatchに飛ばす方法
-
CreateObject("Excel.Applicati...
-
ASP.NetでのActiveX
-
ASP.NETで使用しているJavascri...
-
winsock通信時エラーの回避
-
エラー 'ASP 0115' について
-
oracleを利用できません。(glob...
-
07弥生会計のエラー
-
VBA RemoveDuplicatesで「アプ...
-
ASPプログラミングでADODB.C...
-
FileCopy時のエラー
-
エラー内容について
-
EXECLマクロでshapeがグルーフ...
-
隠しフィールドをVBScriptでの...
-
GridView表示の高速化
-
ソケット通信で同時受信の制限?
-
UpdatePanel と GridViewについ...
-
ASPへのデータの受け渡しについて
-
エクセルVBA 宣言Dimの場所
-
ASPからASPを呼び出す方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# try-catch でcatchに飛ばす方法
-
FileCopy時のエラー
-
エラー 'ASP 0115' について
-
EXECLマクロでshapeがグルーフ...
-
CreateObject("Excel.Applicati...
-
VBSからPDFファイルを開きたい...
-
winsock通信時エラーの回避
-
ASP.NET C# ローカルのパスが呼...
-
Outlookで添付ファイルの有無を...
-
エラー 'ASP 0115'
-
WinXPProにVC++6.0をイン...
-
fopenでエラーとなる
-
IIS7.5の設定の仕方
-
エラー内容について
-
ASPプログラミングでADODB.C...
-
ASP.NETで使用しているJavascri...
-
ASPからWscriptを利用して外部...
-
オブジェクト生成エラー
-
VB6でRDOに接続できない
-
オラクル接続をopenしようとす...
おすすめ情報