• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語のfopenについて教えてください。)

C言語のfopenとファイルの再オープンについて

このQ&Aのポイント
  • C言語のfopen関数について教えてください。あるファイルをrモードでfopenした場合、同じファイルを再度rモードで開いても問題ありませんか?また、同時に複数の処理が実行された場合に起こりうるエラーや回避方法について教えてください。
  • C言語のfopen関数を使用してファイルをrモードで開いた場合、同じファイルを再度rモードで開いても問題ありません。ただし、同時に複数の処理が実行された場合、一部の処理が待たされる可能性があります。エラーの回避方法としては、ファイルを開く処理の前に排他的ロックを行う方法があります。
  • C言語のfopen関数を使ってファイルをrモードで開いている場合、同じファイルを再度rモードで開いても問題ありません。ただし、同時に複数の処理が実行された場合、一部の処理が待たされる可能性があります。エラーを回避するためには、排他的ロックを使用する方法があります。

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

  • ベストアンサー
回答No.2

同じプロセス内の話ならオープンしたファイルハンドルごとで ファイルハンドルは管理しているので 開きっぱなしでもオープンできる限りはエラーになりません。 ただし、同時にオープンできるファイル数には限界があるので 無尽蔵に開き続けるような場合にはいずれオープンに失敗します (そういうerrnoがあったはず) オープンできる限界については プロセスごとと、OS(カーネルパラメータ)の2段階だった予感 なので、1つのプログラムならば オープンしたファイルのパス名とハンドルを別管理する等 同じファイルの複数オープンは修正しておいた方がいいと思うけれど 複数のプログラム(実行モジュール)でアクセスしていて 変更できないのなら仕方ないですね。 ただ、 読み取り中に変更されてしまう可能性と変更されると都合悪い場合には 考え直した方がよいですね。 起動元でファイル名にシーケンス番号をつけて渡してあげるとかして そのファイル名をユニークしてあげるとか

その他の回答 (2)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

同一のファイルを複数回同時にオープンできるかどうかは処理系定義です。 ですので、処理系を特定せずに憶測で回答しても意味がありません。 処理系のマニュアルを熟読することをお勧めします。

  • goosyu
  • ベストアンサー率58% (36/62)
回答No.1

 質問者が考えられているように普通の環境では同一ファイルを複数回読み込みオープンしても問題がないと思います。  OSまたはファイルシステムによってファイルの同時オープン数の上限が少ない場合、ファイル自体のオープンが出来ないことはありえます。 また、何かの問題でファイルオープン出来ない場合もあるので必ずファイルオープンに失敗した場合の処理は必要となります。リトライするのであれば少し時間をあけてから再オープンするような処理は、OSではなくプログラム側で考慮しなくてはいけません。  複数ファイルを同時オープン出来るかは次のようなソースで簡単に確認ができるので、まずは試された方がいいと思います。 FILE *fp1,*fp2; if(NULL ==(fp1=fopen("test.txt","r"))) {printf("1st open NG\n"); } else if(NULL ==(fp2=fopen("test.txt","r"))) {printf("2nd open NG\n");} fcloseall();

okwave_user0
質問者

お礼

詳細なコードを提示してのご回答ありがとうございます。

関連するQ&A