ページ 11

一つのファイルに同時に別のプログラムが書き込み・読み込みはできるのでしょうか?

Posted: 2013年7月31日(水) 04:47
by Cプログラミングマンモス
今回初めて質問致します。
一つのファイルに同時に別のプログラムが書き込み・読み込みを行うことはできるのでしょうか?

現在、A/D変換器からデータを取得し、それをTCPで他の端末に送信する、というプログラムをCで作成しています。
サンプリング周波数は1kHzで、A/D変換器からデータを取得する度に送信、という形で作成し、動作したのですが、
1時間と経たないうちに「メモリがwrittenになることはありませんでした。」というエラーが発生し、停止してしまいます。

この原因を、A/D変換器のバッファのオーバーフローではないかと考え、これを防ぐため、

・A/D変換器からのデータの読み出しと、ファイルへのデータの書き込み
・ファイルからのデータの読み出しと、データの送信

を別のプログラム(もしくは別スレッド)で作成しようかと考えています。
そこで本題なのですが、同一のファイルに、別々のプログラムが書き込み・読み込みを行う事は可能なのでしょうか。
初歩的な質問であることは自覚しておりますが、ご回答をお願い致します。
また、別の解決策もあるようでしたらご教授願います。

Re: 一つのファイルに同時に別のプログラムが書き込み・読み込みはできるのでしょうか?

Posted: 2013年7月31日(水) 10:02
by 珈琲
無理だと思います。

半端な知識しかありませんがその前提で述べさせてもらうと、可能だと思います。
ファイルは書き込む時必ず同時書き込みを阻止するためにロックしますが、読み込みはできるはずなので。

が、一時間以上保存するとなれば読み込み時間が段々長くなっていき、どちらにしろオーバーフローするはずなので、ファイルを時間単位で分ける必要があると思います。
もしくは消すとか。

Re: 一つのファイルに同時に別のプログラムが書き込み・読み込みはできるのでしょうか?

Posted: 2013年7月31日(水) 10:03
by 珈琲
一行目無視してください(^_^;)

Re: 一つのファイルに同時に別のプログラムが書き込み・読み込みはできるのでしょうか?

Posted: 2013年7月31日(水) 10:57
by softya(ソフト屋)
> 1時間と経たないうちに「メモリがwrittenになることはありませんでした。」というエラーが発生し、停止してしまいます。

まず、ここの部分のプログラムがバッファオーバーのガードが甘すぎます。ガードした上で自分で警告を出すようにして下さい。
あとバッファの利用量を把握するためログを取った方が良いと思います。
なんとなく、そんな気がするというのでは対策はお座なりなものになります。

> ・A/D変換器からのデータの読み出しと、ファイルへのデータの書き込み
> ・ファイルからのデータの読み出しと、データの送信

この方式よりも、A/D変換器からのデータの読み出しバッファをダブルバッファにしてTCPでの通信を非同期処理にすれば安定して解決する気がします。