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

情報工学科 3年生対象 専門科目
システムプログラミング
第11回
プロセス間通信4
仮想FTPの実現
担当:青木義満
[email protected]
1
FTP(File Transfer Protocol)とは?
• インターネット初期の頃から存在するプロトコルで、今
でもインターネットでよく使用されるプロトコルの1つで
ある。プロトコル上は任意のホスト間のファイル転送を
行うことが可能であるが、通常は接続したクライアントと
サーバ間の転送に利用される。
• 詳細は下記を参照
– http://ja.wikipedia.org/wiki/File_Transfer_Protocol
2
ストリームソケットを使った仮想FTPの実現1
異なるホスト間で、テキスト(ASCII)ファイルを送信・受信してみよう。
処理の手順
• サーバーを受信側(inet_server_ftp.c)、クライアントを送信側
(inet_client_ftp.c) とする。
• 従来の方法で、サーバー、クライアント間でストリームソケットを使い、コ
ネクションを確立
• クライアントから、サーバー側へ送信するファイル名を送る(コマンドライ
ン引数で与えている)
• サーバー側はこれを受信し、新規ファイルとしてfopen
• クライアントでファイルの中身をファイルの終端まで読み込み、ソケットを
通して送信
• サーバー側はこれを受信し、ファイルに書き込む
まずは自分でやってみる。その後、友達とホスト名、ポート番号を共有し、
ファイルの送信テストを行ってみる。
3
ストリームソケットを使った仮想FTPの実現2
• 異なるホスト間で、バイナリファイルを送信・受信してみよう。
• 基本はテキスト版と同様。
• ファイルからのデータの読み書きに、fread(), fwrite()を使用。
– fopenの引数を”r”, ”w” から ”rb”, “wb”に変更(バイナリモード)。
– 送信側(inet_client_ftp_bin.c):
• char型のバッファー1つを用意し、sizeof(char)単位(1byte)で1つずつfread()で
ファイルからデータを読み出して、ソケットにwrite()
– 受信側(inet_server_ftp_bin.c)
• char型のバッファー1つを用意し、sizeof(char)単位(1byte)ずつread()でソケット
からデータを読み出して、ファイルにfwrite()でsizeof(char)単位(1byte)で1つず
つ書き出し
• 注意!: テキスト版のプログラムのwhileループ内のprintfはテキスト
データ表示用なので削除すること!
• 実行: 適当なバイナリファイル(*.pdf や画像ファイルなど)を送受信。
4
ファイル操作関連関数
•
•
•
•
•
fgets ファイルからの一行単位での文字列読込
fputs ファイルへの一行単位での文字列書込
fread ファイルからのバイナリデータの読込
fwrite ファイルへのバイナリデータの書込
関数の仕様は以下のページ参照
– http://www.bohyoh.com/CandCPP/C/Library/in
dex.html
• バイナリデータの入出力
– http://wisdom.sakura.ne.jp/programming/c/c48
5
.html
バイナリ版FTPプログラム課題の提出
• 期限:12/18 10:40まで
• 送信ファイル:
– inet_server_ftp_bin.c 及び
inet_client_ftp_bin.c
• メール宛先:[email protected]
• メール題目:system11 学籍番号 苗字(す
べて半角英数)
6