サーバー プログラムとクライアント プログラムを作成する実習を行っています。QNX OS 上にあります。Linux で動作するかどうかは不明です。概要は次のとおりです。
「C プログラム msgSender.c と msgLogger.c のペアを作成して、プロセス間での Neutrino メッセージの受け渡しを示します。
プログラムはシェルから次のように呼び出されます。
$ msgLogger logFileName $ msgSender msgLogger
logFileName は、メッセージを保存するログの名前です
msgLogger プロセスは、ロガーとして機能します。メッセージを受信し、メッセージをファイルに書き込みます。
- msgLogger は、msg.h に示されている形式のテキストベースのメッセージを受け取ります。メッセージ ヘッダーをテストし、メッセージ タイプが MSG_DATA の場合にのみメッセージ テキストを logFile に書き込む必要があります。
- MSG_DATA を受信した場合、応答ステータスは MSG_OK です。
- MSG_END を受信すると、サーバーは MSG_END のステータスで応答し、クリーンアップして終了します。
- 受信したメッセージが MSG_DATA または MSG_END でない場合、応答ステータスは MSG_INVALID になり、メッセージ テキストはログに記録されません。警告メッセージが記録されます。
- このプロセスは、その ND PID CHID を msgLogger.pid という名前のファイルに書き込むことによって、その存在をアドバタイズします。ここで、ファイル名の「msgLogger」部分は argv[0] から取得されます。
- ログに記録されたメッセージには、時刻と送信者の ND PID COID がスタンプされます。
msgSender は、テキストベースのメッセージを組み立てて送信する対話型プログラムです。
- コマンド ラインからロガー プロセスの名前を読み取り、この名前を使用して、ND PID CHID を読み取る .pid ファイルの名前を作成します。
- ユーザーにメッセージ ヘッダーの種類と、メッセージのテキストの入力を求めるプロンプトが表示されます。
- サーバーから MSG_END を受信すると終了します。
サーバーから MSG_INVALID を受信した場合、警告を出力します。
- あなたのクライアントとサーバーは、私のクライアントとサーバーと相互運用する必要があります。
- サーバーが複数の同時クライアントで適切に動作することを検証します。
- 各ロギング メッセージの後にサーバーのファイル書き込みバッファをフラッシュする場合は、バックグラウンドで実行し、$ tail -f logFile を使用して受信したメッセージを表示できます。
- コマンドライン引数の有効性を必ず確認してください。
- グローバル変数は必要な場合にのみ使用してください。"
msgLogger は完全に機能しています。ここにコードがあります: http://pastebin.com/8AGfGZ5u
そして、ここに msg.h ファイルがあります: http://pastebin.com/3xcBZvnH
そして、ここに私がこれまでに持っている msgSender のコードがあります: http://pastebin.com/Buk88Kry
送信者 (クライアント) が行う必要があるのは、ユーザーが数字を使用してメッセージ タイプを入力できるようにすることです。msg.h ファイルには、MSG_DATA が 1 などのメッセージ番号のタイプが含まれています。無効な数字を入力すると、再試行するように求められます。そうでない場合は、その数字を保存して、メッセージの amsg.m_hdr に割り当てます。メッセージ構造体。amsg.m_data は、メッセージの値です。
次に、ユーザーが必要なメッセージを入力し、数字 1 (msg_data) を選択した場合、サーバーは通知を送信し、クライアントは「メッセージが正常に受信されました」と出力し、メッセージの内容はログ ファイルに保存されます。
残念ながら、私はたくさんの問題を抱えており、メッセージを記録していません。明日、msgSender を提出する必要があります。これは、次のラボにも依存します。これについて何らかの助けが得られることを本当に願っています。