C言語のfopenについて教えてください。
ある1つのファイルをr(テキストファイル読み込みモード)でfopenしたとします。
そのファイルをfcloseする前に、同じファイルが再度rモードでfopenされても問題ないのでしょうか?
何を気にしているかと言いますと、あるプログラムであるファイルをrモードでfopenして読み込む処理があるのですが、そのプログラムを呼び出す処理が複数あります。
確率は低いと言えど、もし同時にその処理が実行された場合、rモードでfopenしているファイルにfclose前に再度rモードのfopenがされたらエラーとなってしまうのでしょうか?
もし、エラーとなる場合、回避する方法がありますか?
また、エラーとならない場合は、fcloseするまで次の処理が待ってしまうのでしょうか?
読み込みモードだから問題ないのかなとも思ったのですが、どなたかご存知だったら教えてください。
よろしくお願いしますm(_ _)m
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();
No.2ベストアンサー
- 回答日時:
同じプロセス内の話ならオープンしたファイルハンドルごとで
ファイルハンドルは管理しているので
開きっぱなしでもオープンできる限りはエラーになりません。
ただし、同時にオープンできるファイル数には限界があるので
無尽蔵に開き続けるような場合にはいずれオープンに失敗します
(そういうerrnoがあったはず)
オープンできる限界については
プロセスごとと、OS(カーネルパラメータ)の2段階だった予感
なので、1つのプログラムならば
オープンしたファイルのパス名とハンドルを別管理する等
同じファイルの複数オープンは修正しておいた方がいいと思うけれど
複数のプログラム(実行モジュール)でアクセスしていて
変更できないのなら仕方ないですね。
ただ、
読み取り中に変更されてしまう可能性と変更されると都合悪い場合には
考え直した方がよいですね。
起動元でファイル名にシーケンス番号をつけて渡してあげるとかして
そのファイル名をユニークしてあげるとか
No.3
- 回答日時:
同一のファイルを複数回同時にオープンできるかどうかは処理系定義です。
ですので、処理系を特定せずに憶測で回答しても意味がありません。
処理系のマニュアルを熟読することをお勧めします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 1 2022/10/27 14:21
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 入力待ちをして、受け取った正の整数が表す行数だけ既存 4 2022/07/05 10:12
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
fopne で失敗する原因
C言語・C++・C#
-
fopenできる上限の変更
C言語・C++・C#
-
複数ファイルの同時読み込みの方法と脱初心者向け参考書
C言語・C++・C#
-
-
4
#define _CRT_SECURE_NO_WARNINGS について
C言語・C++・C#
-
5
C言語での引数の省略方法
C言語・C++・C#
-
6
関数から配列を返すには?
C言語・C++・C#
-
7
C言語 exitの使い方
C言語・C++・C#
-
8
コマンド(例えばls)の出力結果を文字列で取得するプログラムの作成方法
C言語・C++・C#
-
9
C言語でファイル読み書きを早くしたい。
C言語・C++・C#
-
10
fcloseで発生するエラーについて。
C言語・C++・C#
-
11
fopenで別ディレクトリにファイルをオープンしたい
C言語・C++・C#
-
12
fopenのr+"モードで同時に読み書きする"
C言語・C++・C#
-
13
同じ名前のファイルを作った場合に上書きしてしまうのですが、どうすれば上書きしないで保存できるのでしょうか?
C言語・C++・C#
-
14
数字以外が入力されたらエラー文を出したい。
C言語・C++・C#
-
15
fopenでエラーとなる
C言語・C++・C#
-
16
テキストファイルの行数を取得する方法(C言語
C言語・C++・C#
-
17
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
18
C言語 配列の長さの上限
C言語・C++・C#
-
19
0除算して、落ちるプログラムと落ちないプログラム
C言語・C++・C#
-
20
この <windows.h> はどこに在る? また、参考資料を見たいのですが。
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
ファイル名の先頭にアンダース...
-
csvファイルを開かずに文字を検...
-
ASP .NETでファイル選択ダイア...
-
バッチで118項目のCSVを処理し...
-
CSVファイルへの保存の際、デー...
-
大きいサイズのテキストファイ...
-
同じ名前のファイルを作った場...
-
プログラムで文字をBMPファイル...
-
■ 移植性のないポインタ変換に...
-
最近使ったファイルからファイ...
-
「VBScript」ADODB.Streamにお...
-
Arduinoでのライブラリファイル...
-
マウスポインタの変更
-
[VBScript]ファイルの入出力を...
-
VC++でのiniファイルの読み書き
-
VBAにてEXCEL以外のファイル(テ...
-
ファイル読み書き方法について...
-
グーグルクロームとIEの表示の違い
-
グローバル変数のよくない使い...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
CSVファイルへの保存の際、デー...
-
ファイルを記録してあるセクタ...
-
テキストファイルの最終行を削...
-
SGファイルって何ですか?
-
ドラッグアンドドロップでファ...
-
分割コンパイルの#defineについて
-
VBに、Cのincludeのようなもの...
-
fopenできる上限の変更
-
グローバル変数のよくない使い...
-
ファイルの結合
-
大きいサイズのテキストファイ...
-
iniファイルに追記がしたいです。
-
バッチで118項目のCSVを処理し...
-
ハッシュの計算時間について
-
C言語のfopenについて教えてく...
-
Javascript で INI の読み書き
-
Excelマクロでの再読込み方法
おすすめ情報