
C言語のfopenについて教えてください。
ある1つのファイルをr(テキストファイル読み込みモード)でfopenしたとします。
そのファイルをfcloseする前に、同じファイルが再度rモードでfopenされても問題ないのでしょうか?
何を気にしているかと言いますと、あるプログラムであるファイルをrモードでfopenして読み込む処理があるのですが、そのプログラムを呼び出す処理が複数あります。
確率は低いと言えど、もし同時にその処理が実行された場合、rモードでfopenしているファイルにfclose前に再度rモードのfopenがされたらエラーとなってしまうのでしょうか?
もし、エラーとなる場合、回避する方法がありますか?
また、エラーとならない場合は、fcloseするまで次の処理が待ってしまうのでしょうか?
読み込みモードだから問題ないのかなとも思ったのですが、どなたかご存知だったら教えてください。
よろしくお願いしますm(_ _)m
No.2ベストアンサー
- 回答日時:
同じプロセス内の話ならオープンしたファイルハンドルごとで
ファイルハンドルは管理しているので
開きっぱなしでもオープンできる限りはエラーになりません。
ただし、同時にオープンできるファイル数には限界があるので
無尽蔵に開き続けるような場合にはいずれオープンに失敗します
(そういうerrnoがあったはず)
オープンできる限界については
プロセスごとと、OS(カーネルパラメータ)の2段階だった予感
なので、1つのプログラムならば
オープンしたファイルのパス名とハンドルを別管理する等
同じファイルの複数オープンは修正しておいた方がいいと思うけれど
複数のプログラム(実行モジュール)でアクセスしていて
変更できないのなら仕方ないですね。
ただ、
読み取り中に変更されてしまう可能性と変更されると都合悪い場合には
考え直した方がよいですね。
起動元でファイル名にシーケンス番号をつけて渡してあげるとかして
そのファイル名をユニークしてあげるとか
No.3
- 回答日時:
同一のファイルを複数回同時にオープンできるかどうかは処理系定義です。
ですので、処理系を特定せずに憶測で回答しても意味がありません。
処理系のマニュアルを熟読することをお勧めします。
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();
お探しの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も見ています
-
C言語---ファイルに出力したデータをすべて消去する方法
C言語・C++・C#
-
fopne で失敗する原因
C言語・C++・C#
-
複数ファイルの同時読み込みの方法と脱初心者向け参考書
C言語・C++・C#
-
-
4
fopenできる上限の変更
C言語・C++・C#
-
5
コマンド(例えばls)の出力結果を文字列で取得するプログラムの作成方法
C言語・C++・C#
-
6
fopenで別ディレクトリにファイルをオープンしたい
C言語・C++・C#
-
7
ファイルの途中に文字列を挿入
C言語・C++・C#
-
8
テキストファイルから文字列を読み込んで二次元配列に格納するには
C言語・C++・C#
-
9
ファイル書込みで一行もしくは部分的に上書きする
PHP
-
10
C言語で、メモリを解放しないで終わるプログラム
C言語・C++・C#
-
11
関数から配列を返すには?
C言語・C++・C#
-
12
ファイルの結合
C言語・C++・C#
-
13
変数名の付け方
Java
-
14
LPCWSTRとchar
C言語・C++・C#
-
15
C言語のポインターに関する警告
C言語・C++・C#
-
16
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
17
gccのインクルードパスの確認
UNIX・Linux
-
18
C言語初心者の質問失礼します。
C言語・C++・C#
-
19
ライブラリ作成時のグローバル変数の対応(C言語)
C言語・C++・C#
-
20
Teratemマクロ(ttl)のwaitについて
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
-
ピンとくる人とこない人の違いは?直感を鍛える方法を心理コンサルタントに聞いた!
根拠はないがなんとなくそう感じる……。そんな「直感がした」という経験がある人は少なくないだろう。ただ直感は目には見えず、具体的な説明が難しいこともあるため、その正体は理解しにくい。「教えて!goo」にも「...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイル名の先頭にアンダース...
-
C言語初心者の質問失礼します。
-
CSVファイルへの保存の際、デー...
-
グローバル変数のよくない使い...
-
csvファイルを開かずに文字を検...
-
Visio2000で作成中にハングアッ...
-
VB.NETによるプロセス間通信
-
WORD2007 VBA
-
ダイアログボックスで複数フォ...
-
Access2010の最適化設定について
-
テキストファイルの最終行を削...
-
バッチで118項目のCSVを処理し...
-
nasmのファイル検索について
-
fopenできる上限の変更
-
Thunderbirdでemlファイルを開...
-
バイナリーデータをCSV変換して...
-
iniファイルに追記がしたいです。
-
ファイルの結合
-
複数ファイルによる共通の外部...
-
ShellExecuteEx→WaitForSingleO...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
dataファイルをxtxファイルにす...
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
CSVファイルへの保存の際、デー...
-
グローバル変数のよくない使い...
-
バッチで118項目のCSVを処理し...
-
テキストファイルの最終行を削...
-
VBAにてEXCEL以外のファイル(テ...
-
VBに、Cのincludeのようなもの...
-
分割コンパイルの#defineについて
-
RPGでファイル名(もしくはレコ...
-
SGファイルって何ですか?
-
マウスポインタの変更
-
Excelマクロでの再読込み方法
-
【C#】リソースファイルの埋め...
-
ダイアログボックスで複数フォ...
-
C言語のfopenについて教えてく...
-
ドラッグアンドドロップでファ...
-
「VBScript」ADODB.Streamにお...
おすすめ情報