![]() | 加藤和彦 (kato@is.tsukuba.ac.jp)
![]() 新城靖 (yas@is.tsukuba.ac.jp)
| |
最新の重要連絡がここにありますので,必ず参照してください.
この実験では,UNIX上で動作する簡単なシェル(コマンド・インタプリタ)を作成する.この実験の目的は,簡単なシェルの作成を通じて,プロセスの生成,入出力の切替え,パイプの動作について深く理解することを目的とする.
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 等の項目を調べよ.
(7) 標準エラー出力の切替え
例:% make |& tee log
(8) 標準出力,標準エラー出力における追加モード
例:% cat data1 | sort >> result
(9) 複数のコマンドの順次実行
例:% date; who; pwd
(10) 子シェル(コマンド・グループ)の実行
例:% (cat data1 data2 | sort > result) >& error
(11) バックグランド実行
例:% sort data | lpr &
(12) 条件実行
例:% egrep pattern data > result && lpr result
例:% cc test.c >& err || lpr err
(13) cd, time, pushd, popd などの内部コマンドの提供
例:% cd /
(14) ジョブ制御(フォアグランド,バックグランドの切替え)
(15) その他,UNIX 上のシェルが持っている機能
(16) UNIX上のシェルがもっていないような新しい機能
![]() | 作成したシェルが持っている外部仕様(機能と制限事項)について,報告書に明確に記述しなさい.当然のことながら,多くの機能があり,制限がないことが望ましい.
![]() 作成した機能を説明するために,十分な実行例を添付しなさい.複数の機能の組み合わせについても同様である.
| ![]() UNIX上の既存のシェルと実験で作成した簡単なシェルを比較しなさい.特に,パイプラインの作成方法について比較しなさい.
| |
ネットワークプログラミングの理解を深めることを目的として,UNIXのソ ケット機能を用いて対話的にファイル転送を行うプログラムmftp (mini-ftp)を作成する.
以下の諸点に注意してプログラムを作成すること.
![]() | ネットワークプロトコルとしてTCP/IPを用いること.
![]() TCPプロトコルのソケットに対してreadおよびwriteシステムコールを実行すると,通常のディスクファイルに対する入出力と
異なり,指定したバイト数よりも少ないバイト数しか入出力が行なわれな いことがある.これはOSカーネル内のTCPプロトコル用のバッファサイズに起因している.この点に注意をしてこれらのシステムコールを使うこと.
| ![]() あらかじめサーバサイト側でサーバプログラム(mftpd)を前もって 立ち上げておく.ユーザはクライアントプログラム(mftp)を起動する際に
通信相手となるサーバサイト名を指定する. すなわち,クライアント側は 次のようなシェルコマンドでクライアントプログラムを起動する. | % mftp server_site_name ![]() 必要に応じてmftpの起動時引数を追加してもよい.
| ![]() ソケットのポート番号としては,他の実験者との衝突を避けるために,各自 | (学籍番号*10)〜(学籍番号*10+9)} を用いるようにすること. ![]() mftpは少なくとも次のような対話コマンドをサポートすること.
|
![]() 上記以外に例えば下記のような対話コマンドを実行できるようにしてもよい.
|
![]() 全体の設計としてはftpやtftpを参考にするとよい.
| |
![]() | 1MB以上のファイル転送が可能であることを示すこと.使用可能なすべての対話コマンドの実行例を示すこと.
![]() 正しくファイル転送が行われていることをしめすために,サーバ側とクライアント側でのシェルコマンド"ls
-l"の実行結果を付けること.
| |
項 目 |
説 明 |
||||||||||||
プログラムの仕様 |
|
||||||||||||
アルゴリズム,方式,内部動作の説明 |
|
||||||||||||
開発環境 |
|
||||||||||||
プログラム(ソースコード) |
|
||||||||||||
実行結果 |
|
||||||||||||
参考文献 |
|
||||||||||||
要した時間 |
|
||||||||||||
本実験の感想 |
|
||||||||||||
レポートのバインディング |
|