担当教官
この実験では、次の課題を行う。2学期は、9月1日4時間目(13:45-)から説明を行います。 3C113 の canna27 の近くに集まって下さい。
この実験では、レポートを2通提出します。 2通とも提出しないと、単位は出ません。 課題1の締切は10月11日(水)です。 レポートは、レポート作成上の注意を良く読み、3C113に設置されるレポート提出箱に提出しなさい。
この実験では,UNIX上で動作する簡単なシェル(コマンド・インタプリタ) を作成する.この実験の目的は,簡単なシェルの作成を通じて,プロセスの生 成,入出力の切替え,パイプの動作について深く理解することを目的とする.
この課題1に関する補足説明を参考にしても良い.
UNIXでは,さまざまなシェルが利用可能になっている.例えば, sh, csh, tcsh, bash, ksh, zsh等がある.これらのシェルが持っている機能と,それ らの機能がどのようにして実現されているかを調べなさい.特に,コマンド の実行方法,パイプラインの作成方法(パイプラインに属しているプロセス の親子関係)について,調査しなさい.そして,何を調べたか,調査の結果 とその方法を報告しなさい.
次の機能を持つシェルを作成しなさい.以下に示す例は,UNIXの csh (tcsh) の文法と機能に基づいている.
(1) 単一コマンドの実行
例:% ls
(2) 標準入出力の切替え
例:% wc < data > result
(3) 複数コマンドからなるパイプラインの実行
例:% cat data1 data2 | sort +1 -2 | lpr
(4) 上記(1)〜(3)の組み合わせ
例:% cat data1 data2 | sort +1 -2 > result
(5) 終了コマンド(csh では,exit)を受け付けると終了するものとする.しかしながら,^C, ^\ といったキーボードからの割込みによって,シェル自身が終了してはならない.シェルから起動したコマンドは,これらの割込みにより終了するものとする.割込みについてマニュアルの signal 等の項目を調べよ.
(6) 標準エラー出力の切替え
例:% make |& tee log
(7) 標準出力,標準エラー出力における追加モード
例:% cat data1 | sort >> result
(8) 子シェル(コマンド・グループ)の実行
例:% (cat data1 data2 | sort > result) >& error
(9) バックグランド実行
例:% sort data | lpr &
(10) 条件実行
例:% egrep pattern data > result && lpr result 例:% cc test.c >& err || lpr err
(11) cd, time, pushd, popd などの内部コマンドの提供
例:% cd /
(12) ジョブ制御(フォアグランド,バックグランドの切替え)
(13) その他,UNIX 上のシェルが持っている機能
(14) UNIX上のシェルがもっていないような新しい機能
作成したシェルが持っている外部仕様(機能と制限事項)について,報告書に 明確に記述しなさい.当然のことながら,多くの機能があり,制限がないこと が望ましい.作成した機能を説明するために,十分な実行例を添付しなさい. 複数の機能の組み合わせについても同様である.UNIX上の既存のシェルと実 験で作成した簡単なシェルを比較しなさい.特に,パイプラインの作成方法に ついて比較しなさい.
ネットワークプログラミングの理解を深めることを目的として,Unixのソケッ ト API を用いて対話的にファイル転送を行うためのサーバ・プログラム、お よび、クライアント・プログラムを作成する。サーバ・プログラムを、mftpd (mini ftp daemon)、クライアントを mftp (mini ftp) と呼ぶ。
バイト・オーダが違うコンピュータであっても転送できるようにしなさい。デー タとして0を含むようなバイナリ・ファイルも転送できるようにしなさい。
コマンドやデータ区切りを保つには、次のような方法が考えられる。
サーバ・プログラム mftpd は、次のようにして実行する。
% mftpd portno引数として、ポート番号を取る。必要に応じて時引数を追加してもよい.
ポート番号としては,1024 以上で、他の実験者との衝突を避けるために,引 数で与えられるようにしておくとよい.ただし、サーバは終了しないので、自 分自身のプログラムと衝突させて、多数の mftpd を実行しないように注意し なさい。特定のポート番号は、一定時間利用できなくなることがあるので、2、 3個のポート番号を順に使うとよい。
サーバ・プログラム mftp は、次のようにして実行する。
% mftp host portno引数として、サーバが動作しているホストのホスト名とポート番号を取る。必 要に応じて引数を追加してもよい.
mftpは少なくとも次のような対話コマンドをサポートすること.
この課題では、ネットワークプロトコルとしてTCP/IPを用いなさい。また、通 常の Socket API 、または、それと類似のレベルの API を用いること。
TCPプロトコルのソケットに対してreadおよびwriteシステムコールを実行する と,通常のディスクファイルに対する入出力と異なり,指定したバイト数より も少ないバイト数しか入出力が行なわれないことがある.これはOSカーネル内 のTCPプロトコル用のバッファサイズに起因している.この点に注意をしてこ れらのシステムコールを使うこと.
この課題では、サーバは、既存の X Window、Java、または、その他の既存の ウインドウ・システムの機能を用いて画面を表示する。クライアント側は、 サーバに対して TCP/IP により要求を送る。
この課題では、ネットワークプロトコルとしてTCP/IPを用いなさい。また、通 常の Socket API 、または、それと類似のレベルの API を用いること。
TCPプロトコルのソケットに対してreadおよびwriteシステムコールを実行する と,通常のディスクファイルに対する入出力と異なり,指定したバイト数より も少ないバイト数しか入出力が行なわれないことがある.これはOSカーネル内 のTCPプロトコル用のバッファサイズに起因している.この点に注意をしてこ れらのシステムコールを使うこと.
ウインドウを表示するプログラムについては、次のプログラムを参考にしてもよい。
プログラムの入力と,その入力に対する動作および出力を過不足なく述べること.
自分で設定した拡張や制約に関しても述べること.
アルゴリズム,方式,内部動作の説明 プログラム中で使用しているアルゴリズムや方式の採用理由とその内容を分かりやすく説明すること.
ネットワークプログラミングの場合は,クライアントプロセスとサーバプロセスの間のプロトコル(両プロセスでどういう場合にどういうメッセージやデータがやりとりされるか)を記載すること.
必要に応じて図を用いること.
プログラムの中に書き込むのではなく,独立したページに記述すること.
プログラム開発に使用したプログラミング言語,言語処理系,オペレーティングシステム,計算機機種,ライブラリ等を記載すること.
作成したプログラムを記載すること.
実行環境(少なくとも計算機機種名,オペレーティングシステム名)),および,実行結果を記載すること.
実行結果は,プログラムがきちんと動作していることを示すために必要かつ十分なものになるようにすること.
実行結果の入力部と出力部がはっきりとわかるように工夫すること.
実行例を考える際には,どういう例を付せば,実現すべき機能が動作していることを示せるかをよく考えること.
実行例をわかりやすくるすためには,プログラムの仕様作成の際に,どういう入出力をすると効果的かを配慮しておくとよい.
実行結果が付されていない機能に関しては,実現されなかったものとみなす.
プログラミングおよびレポート作成の際に参考にした参考文献を記載すること.
プログラムの作成に要した時間,および,本レポートの作成に要した時間を記載すること.プログラムモジュールごとの開発時間を記載してもよい. プログラミングおよびレポート作成の際の感想を記載すること.
レポートの左上をホッチキス等でとめること.