0

Linux マシンで C 言語でプログラムを作成し、シリアル ポートの読み取りと書き込みを行いました。私のプログラムデータを送信しているエミュレータを実行しているWindows XPマシンに接続されています。

私のプログラムには 2 つのスレッドがあり、1 つはシリアル ポートからの入力を読み取って処理するためのものです。そのためのスレッドはサーバーソケットに接続し、処理されてからシリアルポートに書き戻されるデータをリッスンします。これらのスレッドは両方とも、実行中に継続的にループしています。

私が抱えている問題は、書き込みコマンドにあります。

 void writeToPort(unsigned char* buf, int length)
 {
     int w = 0;
     if(fd > 0)
         w = write(fd, buf, length);

      printf("wrote %d bytes\n", w);
 }

そして、私はこのようにポートを開きます

fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK);

最初の数秒間は正常に機能しています。Windows のハイパーターミナルで、予期したバイトが適切に送信されていることを確認しました。ただし、ある時点で write() 呼び出しがハングします。もう一方の入力読み取りスレッドは続行され、シリアル ポートからの読み取りは正常に機能します。

なぜこれが起こっているのか誰にも分かりますか?fd で読み取りまたは書き込みが行われるたびにミューテックスを使用しようとしましたが、違いはないようです。他のスレッドがポートから実行中/読み取り中かどうかも問題ではないようです。アドバイスや提案は大歓迎です、ありがとう

4

1 に答える 1

0

高レベルから問題にアプローチする場合、メインスレッドが設計と同じままである基本的な fork サーバーモデルを実装します (シリアル経由で入力をリッスンします)。新しいメッセージが届いたら、新しいプロセスをフォークして処理を行い、返信をエコーバックします...

Unix ソケット プログラミングの事実上のバイブルについては、Steven の UNIX Network Programmingを参照してください。

于 2012-10-18T22:40:26.757 に答える