情報基礎A 「Cプログラミング」(ステップ1:Linux CLI 編)
以下では、TurtleEditを使わず、Linux環境に標準的にインストールされているソフトを使ってプログラミングを行う方法を紹介する。 より「玄人的」な操作方法、と言って良いだろう。
Linux環境に標準装備の機能を使ったプログラム開発
ステップ0:端末エミュレータを開く
ログインがうまくいったら、最初に端末エミュレータ(「端末」あるいは"Terminal")を開くようにしよう。端末エミュレータを開くには、デスクトップの「Terminal」アイコンをダブルクリックするか、画面丈夫の「アプリケーション」メニューを開き、アクセサリ→端末 を選ぶ。すると、次のようなウィンドウが現れるはずだ。これが、プログラム開発の言わば司令塔となる。
上記のこの操作を何度も行うと、複数の端末エミュレータを開くことができるし、「端末」のファイルメニューで複数個のセッションを開くこともできる。
端末エミュレータの操作は、コマンドと呼ばれる文字列(指示)をタイプし、Enterキーを押す動作によって行う。コマンドの列によってコンピュータを操作することから、このような使い方をCLI(コマンドラインインターフェース)と呼んでいる。それに対して、マウスやタッチ操作等で行ういつものような操作方法をGUI(グラフィックユーザーインターフェース)と呼んでいる。昔のコンピュータは、基本的に、CLIばかりだったし、現在でも、プログラム開発やシステム管理にはCLIが使われる場面が多い。
ICLのUbuntu環境では、コマンドプロンプトは、
ユーザーID@ホスト名:作業ディレクトリ$
の形式に設定されている。
上の図で、$の右の箇所("pwd"や"ls")がコマンド行である。図には見えていないけれども、コマンド行の最後には、Enterキーが押されている。図と全く同じコマンドをタイプしてみて、動作を確認してみよう。画面に見えている "c58a3raw@lj6003:~$" 等は、コンピュータからの「コマンドを受け付けています」というサインである(コマンドプロンプトと呼ぶ)。これが出ていない状態は、まだコマンドの処理中ということになる。
UNIXコマンドの基本的な使い方
端末エミュレータの操作の仕方は、Windowsの「コマンドプロンプト」の使い方とほぼ同様と考えてよい。ただし、UNIXとWindows(のコマンドプロンプト)とは、コマンドの種類と作法が若干異なるので、Windowsの操作に慣れている方は注意が必要。
以下のコマンドは、今後の実習に最低限必要なので、ここで覚えてしまおう。(UNIXコマンドのさらに詳しい使い方を勉強したい方は、例えば、 こちらのWEBページを参照のこと。)
コマンド | 動作 | 使用例 | Windowsでの 同等なコマンド |
---|---|---|---|
ls | ディレクトリー内の ファイルの一覧を表示 |
ls <enter> |
dir |
cd ディレクトリ名 | 名前で指定したディレク トリ内に移動する |
cd Documents <enter> |
cd フォルダ名 |
cd .. | ひとつ上の階層の ディレクトリに移動 |
cd .. <enter> |
cd .. |
pwd | ディレクトリの 現在位置を表示 |
pwd <enter> |
pwd |
cd | ホームディレクトリに戻る | cd <enter> |
cd |
ステップ1:エディターを開いて、ソースプログラムを作成する。
Cでプログラミングを行うためには、C言語で書かれたソースプログラムをコンピュータに入力したり、そのソースプログラムを変更したりする作業が(快適に!)行えなければいけない。そのための基本的なツールがエディタだ。教育情報基盤センターのシステムには何種類ものエディタが利用可能だけれども、この授業では習得の容易な gedit を使って実習を進めることにしよう。
geditは以下のいずれかの方法で起動できる:
- デスクトップの gedit のアイコンをダブルクリックする
- 画面左上の「アプリケーション」メニュー から、アクセサリー → テキストエディター を選択
- あるいは、端末エミュレータ(端末)でコマンド
gedit 編集するファイル名 &
を実行しても起動できる。 ファイル名のところは空でも構わない。
すると、ワープロに似たソフトが立ち上がるはずだ。基本的な操作は(機能が限定された)ワープロと同様なので、使い方に戸惑うことは殆ど無いだろう。
ここで初心者が陥りがちな、いくつか注意点を挙げておく:
- ファイルメニューで「保存」しない限り、変更内容はファイルには反映されない
- 保存の際に、ファイル名の中にスペース(空白文字)を入れないこと。名前にスペースの混じったファイルを作ってしまうと、混乱のもとです。また、日本語文字の入ったファイル名もトラブルの元です。
- myprogram1.c というファイルを残したまま、名前を付け替えたい場合には ファイルメニューの「名前を付けて保存」を選んで、例えば myprogram2.c という名前で保存すればよい
- 保存先の場所(ディレクトリ)をきちんと把握しておくこと。保存場所とは違う場所で作業しているのに「ファイルが消えた!!」と勘違いする学生がとても多い。
基本的なルールとして、Cのソースファイル(プログラムのファイル)は、.c という拡張子をつけることを覚えておこう。c は C言語のC だ。
編集が終わりファイルを保存したら,ファイルメニューから「終了」を選んで終了する。
では、さっそく、以下のソースプログラムをエディタ(gedit)で入力し、dow.c という名前で保存してみなさい。タイプの得意な人は、エディターの使い方の練習と思って打ち込んでください。面倒と思った人は、「コピー&ペースト」を使ってもよろしい。プログラムの内容が理解できなくても大丈夫。数回後には全てが明らかになるはず!
dow.c
コピー&ペーストする際には、最初の#やおしまいの}がきちんと選択範囲に入っていることを確認すること。
#include <stdio.h> main() { int year, month, day, year2, month2, dayofweek ; static char dow[][4] = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"} ; printf("Year ?: ") ; scanf("%d",&year) ; printf("Month ?: ") ; scanf("%d",&month) ; printf("Day ?: ") ; scanf("%d",&day) ; if (month==1 || month==2) { year2 = year - 1 ; month2 = month + 12 ; } else { year2 = year ; month2 = month ; } dayofweek = (year2 + year2/4 - year2/100 + year2/400 + (13*month2+8)/5 + day) % 7 ; printf("%d/%d/%d is %s.\n",year,month,day,dow[dayofweek]) ; }
入力が終わったら、間違いがないかどうか確かめて、最後にファイルメニューで「保存」または「別名で保存」する。その際、保存ファイル名は dow.c で統一しておこう。
ステップ2:プログラムのコンパイル
次に、端末エミュレータ(Terminal)の画面に移って、ファイルがちゃんと保存されているかどうか確認してみよう。
上記のコマンドをうまく操作して、先ほど作成して保存したファイル(dow.c)が置かれているディレクトリ(フォルダ)に移動する。ファイルがその場所にあることが確認できたら、次のコマンドで、Cコンパイラーを起動する:
cc dow.c
ccはCコンパイラ(C Compiler)のキモチ。少しだけ待ったあとに、何事もなくプロンプトが「返って」きたら、コンパイルは成功。もし色々とエラーメッセージが出てきたらきっとタイプミスがあるはずなので、エディタに戻ってチェックする。修正が終わったら「保存」をお忘れなく。コンパイラーはほんのちょっとしたミスでも見逃してくれません。これから先の実習で困ったら、こちらのページなども参考に。
ステップ3:プログラムの実行
では、最後に実行してみよう。コンパイルに成功したら、そのディレクトリに a.out という名前のファイル(実行ファイル)が出来ているはずだ。ls で確認してみよう。a.out というのは、特に何も指定しなかった場合に作られる実行ファイルの名前:実行ファイルというのは、その名前をタイプするだけで自動的に実行される。そこで
a.out <enter>
とタイプすると、a.outというファイルの中に格納された機械語のコードが自動的に処理(実行)される。プログラムが走り出すと、とやると、プログラムが走り出して、Year(西暦), Month, Day の順に尋ねられるはず。それぞれについて数字を入れると、最後にその日の曜日が表示されるはず。このプログラムを使って、自分の誕生日が何曜日だったのか調べてみよう。
実行ファイルにa.out以外の名前をつける
実行ファイル名としてa.out 以外の名前を付けたければ、コンパイル時に -o 実行ファイル名 オプションを付けて
cc -o dayofweek dow.c
のように指定することもできる。
このようにコンパイルして出来た実行ファイルを起動するには(a.outではなくて)、
dayofweek <enter>
とタイプすればよい(dayofweek
という新しいUNIXコマンドを作成したことになる)。
コマンドを使ったファイルの管理
ファイルやディレクトリの管理は、ファイルマネージャー(Nautilus:左のアイコン)を使って操作することもできるが、ここではUNIXのコマンドを使った操作方法をまとめておく。 慣れてくるとCLIのほうが効率的に作業できる場合が多い。
作業内容 | 使用コマンド | 操作例 |
---|---|---|
ディレクトリを作成する |
mkdir ディレクトリ名 |
mkdir c |
ディレクトリ名を変更する*1 |
mv 元の名前 新しい名前 |
mv c clang |
ディレクトリを別の場所に移動する |
mv ディレクトリ名 移動先ディレクトリ |
mv clang ./Documents |
ディレクトリを削除する*2 |
rmdir ディレクトリ名 |
rmdir ./Documents/clang |
*1ディレクトリ abc を cdf に名前を付け替えようとして mv abc cdf を実行したとしよう。そのとき、もしすでに cdf というディレクトリが存在していたら、abc は ./cdf/abc に移動されるので注意。
*2 ディレクトリを削除する場合は、その中身を空にしておかなければいけない。