今回初めて質問致します。
一つのファイルに同時に別のプログラムが書き込み・読み込みを行うことはできるのでしょうか?
現在、A/D変換器からデータを取得し、それをTCPで他の端末に送信する、というプログラムをCで作成しています。
サンプリング周波数は1kHzで、A/D変換器からデータを取得する度に送信、という形で作成し、動作したのですが、
1時間と経たないうちに「メモリがwrittenになることはありませんでした。」というエラーが発生し、停止してしまいます。
この原因を、A/D変換器のバッファのオーバーフローではないかと考え、これを防ぐため、
・A/D変換器からのデータの読み出しと、ファイルへのデータの書き込み
・ファイルからのデータの読み出しと、データの送信
を別のプログラム(もしくは別スレッド)で作成しようかと考えています。
そこで本題なのですが、同一のファイルに、別々のプログラムが書き込み・読み込みを行う事は可能なのでしょうか。
初歩的な質問であることは自覚しておりますが、ご回答をお願い致します。
また、別の解決策もあるようでしたらご教授願います。
一つのファイルに同時に別のプログラムが書き込み・読み込みはできるのでしょうか?
-
珈琲
Re: 一つのファイルに同時に別のプログラムが書き込み・読み込みはできるのでしょうか?
無理だと思います。
半端な知識しかありませんがその前提で述べさせてもらうと、可能だと思います。
ファイルは書き込む時必ず同時書き込みを阻止するためにロックしますが、読み込みはできるはずなので。
が、一時間以上保存するとなれば読み込み時間が段々長くなっていき、どちらにしろオーバーフローするはずなので、ファイルを時間単位で分ける必要があると思います。
もしくは消すとか。
半端な知識しかありませんがその前提で述べさせてもらうと、可能だと思います。
ファイルは書き込む時必ず同時書き込みを阻止するためにロックしますが、読み込みはできるはずなので。
が、一時間以上保存するとなれば読み込み時間が段々長くなっていき、どちらにしろオーバーフローするはずなので、ファイルを時間単位で分ける必要があると思います。
もしくは消すとか。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 一つのファイルに同時に別のプログラムが書き込み・読み込みはできるのでしょうか?
> 1時間と経たないうちに「メモリがwrittenになることはありませんでした。」というエラーが発生し、停止してしまいます。
まず、ここの部分のプログラムがバッファオーバーのガードが甘すぎます。ガードした上で自分で警告を出すようにして下さい。
あとバッファの利用量を把握するためログを取った方が良いと思います。
なんとなく、そんな気がするというのでは対策はお座なりなものになります。
> ・A/D変換器からのデータの読み出しと、ファイルへのデータの書き込み
> ・ファイルからのデータの読み出しと、データの送信
この方式よりも、A/D変換器からのデータの読み出しバッファをダブルバッファにしてTCPでの通信を非同期処理にすれば安定して解決する気がします。
まず、ここの部分のプログラムがバッファオーバーのガードが甘すぎます。ガードした上で自分で警告を出すようにして下さい。
あとバッファの利用量を把握するためログを取った方が良いと思います。
なんとなく、そんな気がするというのでは対策はお座なりなものになります。
> ・A/D変換器からのデータの読み出しと、ファイルへのデータの書き込み
> ・ファイルからのデータの読み出しと、データの送信
この方式よりも、A/D変換器からのデータの読み出しバッファをダブルバッファにしてTCPでの通信を非同期処理にすれば安定して解決する気がします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。