オペレーティングシステム2

情報工学科 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