情報工学科 3年生対象 専門科目 システムプログラミング 第10回 プロセス間通信3 担当:青木義満 [email protected] 1 通信方式 • 同期通信 – プロセス間の通信(データ送受信)のタイミング,スケ ジュールが規定された通信 • 非同期通信 – 送りたいときに送り,届き次第受け取る方式 – データが届くまで他の作業をすることが可能 – 複数の入力を待つアプリケーションも可能 • 例) ソケットとキーボード、など複数のファイル記述子から非同 期に入力があるような場合、入力を判断して該当するファイル記 述子からデータを読み出す、等 2 通信方式 • 同期通信 – プロセス間の通信(データ送受信)のタイミング,スケジュールが規定 された通信 • 非同期通信 – 送りたいときに送り,届き次第受け取る方式 – データが届くまで他の作業をすることが可能 – 複数の入力を待つアプリケーションも可能 • 例) ソケットとキーボード、など複数のファイル記述子から非同期に入力 があるような場合、入力を判断して該当するファイル記述子からデータを 読み出す、等 → 簡単な “チャットプログラム” の作成!! 3 INETソケット通信を用いた チャットの実現 • 「キーボードから入力したメッセージを相手の画面に 表示し、相手がキーボードから入力したメッセージを 自分の画面に反転表示するプログラム (inet_server_chat.c, inet_client_chat.c)」 • 必要な機能 – サーバー、クライアント共にキーボード、ソケットの両方か らの入力を常に監視 • キーボードとソケットのそれぞれのファイル記述子から入力があ るかどうかを、select()システムコールを使って、チェック 4 ファイル記述子の監視 〜select() システムコール〜 5 ファイル記述子の集合を操作するためのマクロ • FD_ZERO(fd_set &fds) – 集合fdsをゼロクリアする • FD_SET(int fd, fd_set &fds) – 集合fdsにファイル記述子fdを設定 • FD_CLR(int fd, fd_set &fds) – 集合fdsからファイル記述子fdを解除する • FD_ISSET(int fd, fd_set &fds) – 集合fdsの中のファイル記述子fdが入出力可能 (真)かどうか調べる 6
© Copyright 2024 ExpyDoc