課題
はじめに、C 言語を使ったプログラムの例として用意したプログラムを使って、 この授業の最終目標でもあるネットワーク通信プログラムを動かしてみる。
はじめに、次の2つのファイルを「対象をファイルに保存」を使って「デスクトップ」にダウンロードする。
スタートボタンを右クリックし、エクスプローラを開き、「デスクトップ」にあるダウンロードしたファイルを 一つ上の階層に移動させる。
「スタート」→「Center」→「その他」とたどり、 Cygwin を起動する。 その後、プログラムの「コンパイル」を行い、「実行」してみる。
ogaito@CED102 ~ $ cc chat4.c -o chat4 ogaito@CED102 ~ $ ./chat4 -h proge1.s.fpu.ac.jp Input your name => ogaito
あとは、てきとぉに何か入力すると、参加者全員に配信される。
入力した名前は他の参加者への表示の際に行頭に "[ogaito]"
のように表示される。
参加を取りやめるには、"quitquit"
と入力するか、Ctrl-C
を押す。
この「チャット」を実現している(注)上記のプログラムは、(保存するのではなく、開いてみるとすぐわかることであるが) 動作に関係のないコメントを含めても200行程度のものである。 この授業では、この chat4.c 程度のプログラムの読み書きができることを目標とする。
注
実際には、chat4.c から生成されるプログラムと協調して動作する「サーバプログラム」も必要である。
が、こちらは少しややこしいので、参考資料としてのみ掲げておくにとどめる。
はじめ、少し異なるバージョンを用意したのであるが、Cygwin ではうまくコンパイルできない場合があるようなので変更した。
上では、各自が座っている目の前のコンピュータで、プログラムのコンパイルを行ったが、 今後は、プログラミング E のために用意された専用のコンピュータを併用して学習を進める。 そのための方法を、次に理解する
C を学習するための計算機は、proge1.s.fpu.ac.jp という名前で(体験プログラムの起動時にも指定した) 情報センターに設置され、OS として CentOS 4.4が インストールされている。演習室からこの計算機を利用するためにはログインという操作が必要となる。 このログインのために、プログラミング Eでは、TeraTerm を利用する。
[スタート]→[センター]→[インターネット]→[TeraTerm]とたどり、 teraterm を起動する。
Host を「proge1.s.fpu.ac.jp」、Service を SSH、SSH Version が SSH2、 TCP port#: が 22 となっていることを確認して、[OK]をクリックする。
[Security WARNING]が出た場合、fingerprint として
が表示されていることを確認して、[Continue] をクリックする。 このとき、[Add this machine and its key to ...]にチェックを入れておけば、 次回からは尋ねられなくなる。
User name, Passphrase に割り当てられたものを入力して、 [Use plain password to log in] にチェックした上で [OK]をクリックする
Welcome to ProgE ! [user99@proge1]~%
となれば、成功!
"%" より前の部分をプロンプトと呼ぶ。 プロンプトの設定を変えることもできるが、プログラミング E の授業の範囲ではないので省略。
授業が終わってからなどの時間に聞いてくれれば対応します。
単純な文字列だったり、文字列の長さが短かったりした場合や、 新しいパスワードが一致しなかった場合は、次のように表示されてパスワードは変更されない。[user99@proge1 ~]$ passwd Changing password for user user99. Changing password for user99 (current) UNIX password: ←初期パスワードを入れる。 New UNIX password: ←新しいパスワードを入れる。 Retype new UNIX password: ←新しいパスワードをもう一度入れる。 passwd: all authentication tokens updated successfully.
BAD PASSWORD: it is based on a dictionary word BAD PASSWORD: it's WAY too short Sorry, passwords do not match
割り当てられたアカウントは Programming E でのみ有効なものである。 アカウントと個人の対応をつけるため、次のようにして氏名と学籍番号を登録する。
[user99@proge1 ~]$ chfn Changing finger information for user99. Password: ←この時点で有効なパスワードを入れる Name []: Tatoku Ogaito (ogaito) ←氏名 (アカウント名) Office []: Office Phone []: Home Phone []: Finger information changed.
最低限、設定するのは Name
だけでよい。残りは登録したくなければ Enter キーを押せば良い。
登録ルールとしては Name は必ず設定し、かつ () の中に情報センターのアカウント s0.... を入れること。
センターのアカウント名が間違っていた場合、この後のディスク共有がうまくできない場合がある。
ProgE1 上のファイルをウィンドウズから編集するために、ProgE1 上のハードディスクを 各端末のネットワークドライブとして利用できるようにする。その際に、 ProgE1 の正規のユーザであることを証明するためのパスワードを設定する。 このパスワードをウィンドウズにログオンする際のパスワードと同じにしておくと パスワードの入力を減らすことができる。入力をめんどうと感じないのであれば、 同じにする必要はない。
[user99@proge1 ~]$ smbpasswd Old SMB password: New SMB password: Retype new SMB password: Password changed for user user99
ProgE1 の利用を取りやめる操作である。
デフォルトでは、logout
と入力することで、 teraterm も同時に終了する。
ログアウトができることを確認したら、もう一度同じ操作をして、ログインしておく
[スタート]→[Center]→[その他]とたどると、「proge1 home」という ProgE1 のディスクを利用するためのメニューがある。 それをクリックすることで、ProgE1 のディスクを利用できるようになる。 情報処理演習室以外から利用したい場合は、自分の MO にコピーしておく必要がある。
問題がなければ、ひとつのウィンドウが開き、ProgE1 のディスクをウィンドウズから利用するための準備が整う。 初回の授業の際には、センターのアカウントと ProgE1 のアカウントの対応付けのための準備が必要なため、先走るとできないかもしれない。
teraterm のプロンプトの後ろに ls
と入力して、Enter キーを押してみると
最初はなにも表示されず、いきなりプロンプトが返ってきたはずである。
確かに、ウィンドウズから ProgE1 のディスクを利用しているのだという事を確認するために、
適当なファイルもしくはフォルダ(全角文字は使わないようにすること)を作成した後、もういちど ls
を実行してみる事。
作成したファイルの名前が表示されるはずである。
プログラミング E では、プログラムの作成に使用するエディタを特に指定はしない。 もし、Unix 系の OS を使ったことがあり、Emacs や vi を使いたければ、使用してもかまわない。 特別な経験がない場合には、今までに受講した授業で使用したエディタ(秀丸)を使えば良い。 ワープロ(Word 等)はプログラムの作成には適切ではないので使用しない事。 秀丸は C 言語のプログラムを編集する際に、少し便利な機能があること、複数の漢字コードに対応していること、 複数の改行コードに対応していることから、Windows 上からプログラムを作成するのであれば便利と思われる。
適当なエディタを使って、ProgE1 のディスク上にファイルを作成してみる。
ただし、名前を kadai00.txt
とし、次の内容を記入すること。
ウィンドウズには、標準で C の開発環境はついてきません。 ウィンドウズで広く使われている C の開発環境は、有償でかつそれなりの値段がします。
しかし、無料の開発環境がないわけではありません。 この授業の最初に使用した Cygwin はフリーソフトウェアとして 配布されており、誰でも自由に利用することができます。
一方、Mac OS X の場合は、C の開発環境が OS の付属品として用意されています。 通常の状態ではインストールされていませんが、「開発環境」をインストールすれば C を使いはじめることができます。
Linux 等の UNIX 互換環境の場合も標準で C の開発環境が用意されています。 詳しくは付属のドキュメントを参照するか、直接聞いてください。
kadai01
というディレクトリ(フォルダ)を作成し、そこに移動する。
以下、コマンド実行例を示すが、プロンプト部分は入力する必要はない。 色のついた部分のみを入力すればよい。
[user99@proge1]~% mkdir kadai01 [user99@proge1]~% cd kadai01 [user99@proge1]~/kadai01%
ウィンドウズ上でフォルダを作成した場合は、ログインした状態から一度だけ、
cd kadai01
と入力すればよい。
移動した状態からログインした状態に戻るためには、cd
とだけ入力する。
プロンプトの % の前の部分に、現在の位置(フォルダ)が表示されている。
エディタを使って、kadai01 の中に hello.c
を作成する。
入力する内容は次の5行。
#include <stdio.h> main() { printf("hello world\n"); }
入力が終われば、teraterm のウィンドウで、次の通り実行する。
[user99@proge1]~/kadai01% cc hello.c
[user99@proge1]~/kadai01%
入力が正しければ何も出力されることなくプロンプトが返ってきたはずである。
ls
を実行してみると、a.out
というファイルができているはずである。
a.out の後ろにくっついている *
は、a.out
が実行可能ファイルであることを示している。
[user99@proge1]~/kadai01% ls
a.out* hello.c
[user99@proge1]~/kadai01%
できあがった a.out
を実行してみる。実行するには ./a.out
と指定する。
% ./a.out
hello world
%
となれば、成功である。
C 言語では、大文字小文字を区別するので、PRINTF
と printf
では
異なるものを意味する。
文の終わりには ";" を書く。ひとつの文を複数行に渡って書いたり、複数の文を一行に書いても良い。 改行は空白と同じ意味となる。
printf
は与えられた内容を標準出力(普通は画面)に書き出す働きをする。
連続する「空白」はひとつの空白と同じ意味となる。
つまり、字下げ等を読みやすいように自由に行うことが可能である。
hello.c
はつぎのようにも書くことができる。
#include <stdio.h> main(){ printf("hello world\n");}
#include <stdio.h> main() { printf( "hello world\n" ); }
しかし、コンピュータにとっては同等であっても人にとっては読みやすい、読みにくいがあるので、 理解できやすいように適切に空白を入れたりすることも重要である。
与えられた内容と画面に書き出されたものを比べると、"\n
"が
余分であることが分かる。この"\n
"は何を表しているか?
ヒント: 実際にやってみれば良い :-)
自分の名前をローマ字で画面に表示するプログラムを name.c
として作成せよ。
name.c
を、自分の名前を漢字でも画面に表示するよう、プログラムを修正してみよ。
実行したときに、ただしく表示されるだろうか?
表紙 | 2日目 |