• ベストアンサー

通信系プログラムについて

通信のプログラムを組んでいます。tera termでサーバ上で作業を行っています。送信プログラム、受信プログラム、制御プログラム、データ書き込みプログラムと四つのプログラムを同時に実行させるのですが、送受信するデータ量が大きいと、受信プログラムやデータ書き込みプログラムにバス・エラーcore dumpedと表示されます。プログラム中の動的メモリ管理はしっかりやっているつもりですが、考えられる原因はなんでしょうか?一つのサーバで全部のプログラムを動かしているのがまずいんでしょうか?

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

  • ベストアンサー
  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.2

動的メモリの管理の問題でバスエラー(SIGBUS)と言うのは発生率が低いと思います。 一般的にSIGBUSの原因としては ・デバイスからの応答が無い場合 ・割り込みベクトル番号取り込みのエラー ・メモリー管理ユニット(MMU)で決定した不当なアクセス要求 の3つがほとんどで、アドレス計算ミスやデバイスアクセス時の障害が発生原因と間がられます。 と言ってもSIGBUSはCPUアーキテクチャに依存するのでCUがわからないとなんともいえないのですが… (MC68000ならint *に奇数アドレスを代入しただけでSIGBUSだし) 動的メモリの管理ミスならSIGILLかSIGSEGVが投げられると思います。 どちらにしてもsignalでSIGBUSをトラップしてスタックトレースすればシグナルの発生位置はわかります。 > 一つのサーバで全部のプログラムを動かしているのがまずいんでしょうか プログラムがマトモなら全く問題ないはずですよ。

loversouler
質問者

お礼

ご返答ありがとうございました。 どちらにしてもsignalでSIGBUSをトラップしてスタックトレースすればシグナルの発生位置はわかります。 >の意味がさっぱりわかりません。 よろろしかったら、具体的にどのようにすれば良いか教えて下さい。 よろしくお願いします。

その他の回答 (1)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

ずばり > プログラム中の動的メモリ管理はしっかりやっているつもりですが、 が、きちんとできていない、というのが原因です。 > 一つのサーバで全部のプログラムを動かしているのがまずいんでしょうか? が絡むとしたら、メモリ割り当てで malloc() 等がエラーになったときの処理がきちんと 書けていない、という可能性もありますが。

loversouler
質問者

お礼

バス・エラーが出るプログラムを見直し、動的メモリ管理をしました。malloc()がエラーになった時の処理もきちんと書いたところ、セグメント例外(core dumped)と表示されました。 これはこれはどういう意味のエラーなんでしょうか? ネットで調べてもよく分からないので教えて下さい。

関連するQ&A

  • Socket通信プログラム

    VisualC++6.0(SDK)を用いてSocket通信(UDP)プログラムを 作成(チャットやメッセンジャーのようなもの)しています。 送信用と受信用 1つのプログラムにて、送受信両方の機能を兼ね備えたものを作成しようと思っています。 で、送信側から送ったデータを受信側で処理(文字列の追加など)をして 受信側から送信側に送り戻したいとおもいます。 送信ボタンにより送信します。受信したデータはエディットボックスに表示します。 が、受信したデータを送り返すとしているために、 いつまでも、受信->送信->受信・・・・を繰り返してしまいます。 これを、正しく動作するようにするには、どのようにしたら良いのでしょうか? ご存知の方宜しくお願い致します。 足りないものがあったら、補足させていただきます。

  • シリアル通信について

    質問です。 仕事でシリアルプリンタをMSCommで制御しています。 開発環境はVB6(SP5),XPです。 MSCommにて印字データを一度に沢山送ると情報落ち(?)した印字内容になってしまいます。多分プリンタ内のバッファ(みたいなもの)が一杯になるかして、プリンタの処理能力が限界なのかと勝手に思ったりもしています。 ちなみに10秒間隔くらいで送れば大丈夫です。 一方、シリアル通信の実験としてTera Termを使用しています。Tera Termだと一度に沢山のデータを送っても問題ないです。Tera Termはそこらへんを制御しているのでしょうか? また、MSCommにもそのようなことができるのでしょうか? よくわからない質問かもしれませんが、どんな些細なことでも結構ですのでご教授願います。

  • c# ソケット非同期通信プログラム

    C#でソケット非同期通信プログラムを作りたいと思い勉強しております。ちなみにソケット通信はc言語ではやっておりました。 今作りたいと思ってるプログラム ・ラジオボタンで接続形態(サーバー・クライアント)を選択。 ・送信ボタンを押した時は送信 ・受信した時は受信データをテキストボックスに表示 ・コネクション数は1つで送受信を行う お手数ではございますが、参考になる様なサイトやアドバイス等があれば宜しくお願い致します。

  • windows7で通信プログラムがうまくいきません。

    windows7で通信プログラムがうまくいきません。 XPの時にCで作った単純なHTTP通信プログラムが7だと動作不慮を起こしてしまいます。 サーバー側(centOS)では送ったデータはしっかりと受信できているのですが、そのデータをクライアント(Win7)に送り返すと、データの前半はしっかり受け取っているのですが、後半が壊れて・・・みたいなのがずっと無限に続いて、通信プログラムがとまらなくなるのです。 これって、Win7のせいですか? それとも、やっぱり僕のプログラムがおかしいのでしょうか?

  • PICのシリアル通信のWIN_APIプログラムについて

    PICとPCとのシリアル通信の WIN_APIプログラムについてどなたかご存知の方は教えてください. 現状,API関数を用いて,シリアル通信をできるようにプログラムを作成したのですが,送信はできるのですが,受信データが"C0"をPICから送付しているのに,"FFFFFFFC0"と受信されてしまいます. 先の"FFFFFFF"をとるにはどうしたらいいでしょうか? 現状:受信プログラム // シリアルポートに対する書き込み(PICに送信命令) WriteFile(hCom, w_com_Buf,lstrlen(w_com_Buf), &n, 0 ); // シリアルポートに対する読み込み ReadFile(hCom, s_com_Buf,1, &n, 0 ); mikroC上のUSARTターミナルでは送受信は適正で, 上記のプログラマで 送信はPIC側で受信していることは7SEGを使って確認しています. しかし,PC側では, s_com_Buf[0]には,"C0"が入ったり,"FFFFFFC0"が入ったりします. PICは現状,多チャンネルAD変換をしているため, 送信に対する受信データのやり取りができなくて困っています. どなたか先生教えてください.

  • Androidのデバイス間通信のプログラミングは?

    現在、Androidプログラミングを勉強しています。 Androidのデバイス同士で定期的な通信を行いデータを送受信したいのですが どのような技術を使えば実装できますか? アプリは、遠距離を想定しています。 また、 ・Aがサーバにデータを送信 ・Bがサーバからデータを受信 などサーバを介さずに、送受信することは可能ですか?

  • シリアル通信(送信について)

    現在VB6.0を使用してシリアル通信(RS232C)をMSCOMMを使用して行いたいのですが、受信は出来たのですが、送信がうまくいかない状態です。 MSComm.Output = 送信文字列 & vbCr とすると結果の値を受信できる予定なのですがエラーですという値が返ってきます。 同じ操作をTera Term等で行うと結果が正しく返ってきます。 何故そうなるのかわからない状態で困っております。 何かアドバイス頂けないでしょうか。

  • 制御 通信 組みこみプログラム

    今までずっとwindows上で動くアプリの開発をしてきました。 制御、通信、組み込み系のプログラムにも興味が出てきて試しに作ってみたいと思います。 例えばPCと他のハードウェアと通信を行い、データのやり取りをする といったプログラムを作ってみたいのですが、初心者でもわかるようなサンプルプログラム もとい、サイトないでしょうか?

  • cpuとeeprom間のi2cバス通信の信頼性について教えてください

    I2Cバス通信の信頼性について教えてください。 cpuとeeprom間をI2Cバス通信で制御したく考えています。 その際、送受信のアドレスやデータのbitがこけたりして、データが書き換わってしまうことはありますか? 通常制御、あるいはノイズ環境での信頼性について分かる方がいましたら教えてください。 よろしくお願いします。

  • Javaプログラム同士のプロセス間通信について

    Java初心者です。 デーモン化したJavaプログラムとJavaサーブレット間のプロセス間通信を 行いたいと思っていますがどのようにしたものか悩み中です。 ○デーモン化したJavaプログラムは、 1、あるポートからSocket通信でデータを受信し、受信したデータをDBに格納する 2、クライアントからの要求で1で保存したデータを加工して送信 ○サーブレットプログラムでは、 上記のデーモン化プログラムの設定等をブラウザ上から変更できるようにしたいと考えています。 設定とは、例えば受信したデータを全てDBに保存せずに ブラウザから条件を設定できてフィルターするような動作に変更できたり、 また、デーモン化プログラムの動作をブラウザ上から停止、開始できるようにしたいのです。 上記の様な構成の場合にプロセス間通信をする必要があると思いますが、 どの様なプロセス間通信を使えばいいのか悩んでいます。 ほんとうは上記の様な2つのプログラムを1つのプログラムで出来ればいいなぁ~と考えているのですが、、 実現方法が判りません。。 なにか名案はございませんでしょうか? わかりづらい説明でもうしわけございません。 参考になるかわかりませんが、イメージ図を、 <イメージ図> デ  data   開  data    ク ー --------> 発 -------->  ラ タ        中         イ 鯖        鯖         アント          ↑          |          |設定変更          |       管          └--------- 理                   者 よろしくおねがいします。

    • ベストアンサー
    • Java

専門家に質問してみよう