koarashi_project_no1_cui
CUI
一般的に,コンピュータへの指図は,
- グラフィカルユーザインターフェース,Graphical User Interface, GUI
で行うことが普通です.しかし,その裏では,
- キャラクター(文字)ユーザインタフェース,character user interface, CUI
が実際の仕事をこなしています.
CUIは一般的なユーザには見えません. GUIに対してユーザが行った制御操作を うけとってCPUにつなぐ役割をCUIは担っています. つまり,すごい機械の裏側ではたらくこびとの役なんです.
われわれプログラマーはこのこびとに直接指示を出します.
ディレクトリ
コンピュータには幾つものファイルがあります. このファイルを操作することによって プログラマが意図したようにコンピュータをふるまわせます.
ファイルの種類は,大雑把に,
- データファイル
- ソース,設定,テキスト,図表など
- 実行ファイル
- アプリケーション,フィルター,コマンドなど
に分けられます.
このたくさんあるファイルを管理しやすくするためにディレクトリと呼ばれる 単位でくくるようになっています.
ディレクトリというのは電話帳とか,住所録に似ていることからつけられた名前です.
コマンド
CUIは別名command line interface, CLIとも呼ばれます. コマンドというのは命令という意味です. 英語の簡単な単語や文章からなります.
ls
と打ち込んでください.これは,リスト(list)の省略形を意図しており, ファイルのリストを出しなさいという命令です.
すべてのコマンドはその操作あるいは振る舞いを表現する言葉と結びついています. これは,プログラマが命令を思い出しやすいように, 日常的な単語に結びつけるために意図されたためです. ディレクトリというのが電話帳とか,住所録に似ていることからつけられたのと 同じ発想です.
カレントディレクトリー
ファイルのディレクトリはツリー構造になっています. 木の幹から枝が分かれるようなイメージからついた名前です. ただしそのイメージはさかさまになっていて, 上から下にいくにつれて 根から幹,えだ,そしてはっぱへと広がっていきます. ツリーの一番根本,これをトップと言いますが,そこのディレクトリをルートディレクトリと呼びます. ルートは木の根という意味です.
そこから順にディレクトリはツリーの階層にしたがって構成されています. プログラマが作業するには,その中のどこかに入ってファイルを操作したり, 編集したりします.現在いる場所を表示するには,
pwd
と命令します.
print working directory 作業ディレクトリーをプリントしなさい
という意味です.
今いる場所はカレントディレクトリーと呼ばれます. もっかのあるいはいまのディレクトリという意味です.
ここにあるファイルやディレクトリを表示するのが,
ls
エルエスコマンドの目的です.
カレントディレクトリーにあたらしいディレクトリを作るには,
mkdir hogehoge mkdirはmake directoryの略
とします.hogehogeというのはなんでもいいけど適当な名前を打ち込む時によく使う表現です.
カレントディレクトリからhogehogeのディレクトリに移動するには,
cd hogehoge cdはchange directoryの略
とすれば動きます.ここで
pwd
と打てば,最後がhogehogeとなったディレクトリ名が返されてくるはずです.
ファイル操作
なにか新しいファイルを作りましょう.
touch test.c
と打ち込んでください. これはtest.cという名前のファイルに触りなさいという命令ですが, 副作用として,その名前のファイルがない場合には, 自動的にその名前がついた,中身が何もないファイルを作ります.
ファイルの名前は,
名前ドットc
というようにピリオドで区切られています. ピリオドより後ろにある部分を拡張子と呼びます. 拡張子によってファイルの種類を区別しています. 拡張子は普通は小文字で書きます.
c
というのは
C言語で書かれたプログラムのソースコードだよ
ということを意図しています.
このファイルの名前を変更しましょう.
mv test.c first.c
と打ち込んでください.直訳すると
test.cをfirst.cにmoveしなさい,動かせ
ですが,その結果として名前がfirst.cに変更されます.
ファイルのコピーを作るのは,
cp first.c second.c
です.cpがcopyの略だというのはわかっていただけますね.
ファイルを削除するのは
rm second.c
です.アールエムはremoveの略です.
このとき
remove second.c?
と返ってくるときがあります.これは破壊的な操作をコンピュータに 命令した時に本当にそれがプログラマの意図した操作かどうかを コンピュータが確認するために返してきた反応です.
y
yesの一文字目を打ち込んでreturnして,本気だぜというのをコンピュータに伝えてください.
編集
さて,では初めてのプログラムを作っていきましょう.
プログラムを書くには,それ専用のエディターを使います. プログラマは自分のお気に入りのエディターを持っています. 私はemacs(イーマックス)です.これしかわからないので,これで説明していきます.
エディターを起動するには,
emacs first.c
と打ち込みます.
ここで次のテキストを打ち込んでください.
#include <stdio.h>
int main(void){
printf("Hello world.\n");
}
これをc-x, c-sで保存します.そしてc-zでemacsから抜けます.
この後,
gcc first.c
と打ち込んでください.これは,first.cをgccでコンパイルしなさいという意味です.
ls
してみてください.新しいファイルとしてa.outというのが出来上がっているはずです. これが初めて作った実行ファイルです.これを実行させてみましょう.
./a.out
と打ち込んでください.
bob% ./a.out
Hello world.
と返ってくるはずです.
バグ取り
打ち込んだテキストに間違いがあるとうまく動きません. 間違いのことをバグと言います.虫が服を食い荒らしているイメージです. その時はemacsへ戻って編集していく必要があります.
例えば,
bob% cat first_bug.c
include 'stdio.h'
int main(void){
printf("Hello world.")
というのを打ち込んだとします.幾つもバグ,虫がコードを食い荒らしていて うまくコンパイルが通りません.
bob% gcc first_bug.c
first_bug.c:1:1: error: unknown type name 'include'
include 'stdio.h'
^
first_bug.c:1:9: error: expected identifier or '('
include 'stdio.h'
^
2 errors generated.
というのが典型的なエラーの報告です.通常はエラーが確認された 一番上の行が表示されます.じっくりと聞いてどこからのエラーの報告かを 理解してからemacsへ戻ってその行を編集してください.
プログラミング言語ではかっこやセミコロン,カンマやシャープ記号に意味をもたせています. バグ取りをしながら,C言語で書かれたプログラムの典型的な構造を読み取ってください.
順に説明します.
- printfという関数を使いますが,それを使うために必要なヘッダーファイルをあらかじめ読み込む必要があります.
- 読み込みはincludeという英語があります.そういう命令だよということで,#includeとします.
- 対象ファイルは鉤括弧<>でくくられるか,ダブルコーテーションでくくられる必要があります.
- C言語ではかならずmain関数というのを作る必要があります.
- C言語では関数が返す型を明示する必要があります.
- intというのはmainという関数が返す型が整数だよという意味です.
- 関数は引数をとります.丸括弧のなかに引数を入れます.
- mainですが今は何も引数を取らないということを明示するためにvoid, 「空」を取らせています.
- C言語ではプログラム構造の単位を領域分けするために波カッコ{}でくくります.
- printfはformatしたテキストを打ち出せと命令する関数です.
- printfの命令の内容は丸括弧()の中に入れます.
- printfではダブルコーテーションで囲まれた中にフォーマットを入れています.
- ここでは,"hello world."と打出させています.
- そのあと,改行をいれます.これは\nエンエヌと発音します.
- printfに関する命令が終わったことを明示するためにセミコロンを入れます.
- このセミコロンは文章のおわり,文末を意味するために,ターミネータと呼びます
これで先ほどのhello worldプログラムのソースの解説は終わりです.
mv first.c hello_world.c
としてプログラムの振る舞いがわかる名前に付け替えておきましょう.
出来上がったa.outもhello_worldとするといいでしょう. アンダーバーはファイル名で使えない空白の代わりによく使います. 単語の区切りや幾つもの意味を組み合わせるための工夫です.
この後,c言語の学習は 変数,型,制御,loop, 関数 と進めていきます.記述がくどいかもしれませんが,ゆるしてください.
来週書く内容を忘れないためのメモ,file mode, permission,省略,補間,ドット,ドットドット
Keyword(s):
References:[koarashi_project]