このページでは授業で用いる Cygwin の使い方を説明します。
多くの場合、戸惑うかと思います。しかし、これを使いこなせるようになれば学科の学びにおいて多くの局面でアドヴァンテージとなります。
以下のレベルに達している学生を前提としています。
Cygwin の公式ページには次のように書かれています。
Cygwin is:
- a collection of tools which provide a Linux look and feel environment for Windows.
- a DLL (cygwin1.dll) which acts as a Linux API layer providing
substantial Linux API functionality.
すなわち、Cygwin とは Linux っぽい環境と見た目を Windows 上において使えるようにするツールです。また、Linux の各種機能を DLL を使って簡単に導入できます。
もう少しわかりやすく言えば、Cygwin はコマンドによる操作を通じて Windows を操作するソフトウェアです。従来のマウスを用いた操作に比較して煩雑な印象を最初はおそらく持つかと思います。しかし、慣れてしまえばその利点や魅力が見えてくるかと思います。
以下のように先頭にドルマークを伴う記述はユーザが入力するコマンドを意味します。
$ [コマンド]
以下のように先頭にドルマークを伴わない記述は Cygwin の応答を意味します。
[内容]
以下の例は一行目がユーザの入力、二行目が Cygwin の応答です。
$ dir
cPro rubygems-1.8.24 svn
早速 Cygwin を起動してみましょう。起動方法はインストールマニュアルを御覧ください。起動したら以下の様な画面が表示されるはずです。
この状態では Cygwin は [Cygwin
をインストールしたフォルダ/home/あなたのユーザ名]
を指しています。多くの場合は
C:\cygwin\home\あなたのユーザ名
でしょう。
今後、計算機実習1の授業で Cygwin を用いる際はこのフォルダに関係するファイルを入れていく事をおすすめします。何らかの事情でそれ以外のフォルダに格納したい場合は後の .bashrc の設定 を御覧ください。
テキストエディタを開いて以下の内容をコピーアンドペーストして保存してください。保存場所は前章で説明した場所、拡張子は .c としてください。適当なテキストエディタが無い場合はテキストエディタ紹介の記事を参考に導入してください。
#include <stdio.h>
int main(void){
printf("Hello Cygwin!\n");
return 0;
}
上記のソースをコピペする際は最後に空行を入れることを忘れないでください。この空行にはスペースやタブも含まれてはいけません。仮にファイル名を
hello.c
とします。
本当に保存が出来たのか否かを確認します。 Cygwin
を起動し、下記のコマンド dir
を入力・実行してください。結果として hello.c
が出力に含まれていれば成功です。
$ dir
hello.c
この dir
は現在見ているフォルダに存在するファイルとフォルダの一覧を表示するコマンドです。
上で作った hello.c
をコンパイルして実行します。コンパイルして実行、の意味については次の節を御覧ください。
まず、コンパイルを実施します。これはコンパイルしたいソースファイルと同じフォルダで実行する必要があります。
$ gcc hello.c
gcc
は .c
のファイルをコンパイルするコマンドです。結果として
a.exe
というファイルがアウトプットされているはずです。
dir
で確認してください。
$ dir
a.exe hello.c
されなかった場合は何らかのエラーがソースコードにあることになります。その対処については後で説明します。
以下のコマンドで実行ができます。
$ ./a
Hello Cygwin!
直前に使ったコマンドを再度実行したい時は打ちなおしてもかまわないのですが、長いコマンドになると面倒です。その場合はカーソルキー上を押せば直前に使ったコマンドを出せます。更に上を押せば更に遡れますし、下を押せば戻れます。
$ gcc hello.c
の hello.c を省略入力できます。 h
まで打って Tab
キーを押してみてください。自動で残りを入力してくれます。ただし、同じフォルダに
height.c があった場合、共通部分の he
までしか入力されません。hel まで入れた上で Tab
を使えば残りも自動補完されます。
週ごとにフォルダ分けしたいということもあるかと思います。その場合、フォルダを移動する必要があります。
cd
がフォルダ移動のコマンドです。 Change Directory
と覚えると良いでしょう。また、ファイル・フォルダ名の省略入力が可能です。
以下のようなフォルダ構造だったとします。ここでは
[Cygwin をインストールしたフォルダ/home/]
を home
と記述し、あなたのユーザ名を user
と記述します。
home
┗user
┣F10
┃┣F11
┃┗F12
┗F20
┗F21
起動した時点で dir
すると次のようになります。また、現在位置を確認する
pwd
(Print Working Directory)
も便利なコマンドです。あわせて覚えてしまいましょう。
$ dir
F10 F20
$ pwd
/home/user
/home/user
直下の F10
に移動します。cd F10
で移動できます。直後に dir
と pwd をして確認してみましょう。
$ cd F10
$ dir
F11 F12
$ pwd
/home/user/F10
/home/user
に戻ります。すなわち一つ上のフォルダに戻ります。そのためには
cd ../
とします。
$ cd ../
$ dir
F10 F20
$ pwd
/home/user
/home/user
に移動するときのみ cd
のみでも可能です。一つ上に戻るには常に cd ../
としてください。後者は F11 から F10
に移動するときなどにも使えます。
F21 にアクセスしてまた戻ります。
$ cd F20/F21
$ pwd
/home/user/F20/F21
$ cd ../../
$ pwd
/home/user
例えば D
ドライブにアクセスしたい場合があるかもしれません。その場合は
/cygdrive/d
を使います。
$ cd /cygdrive/d
$ pwd
/cygdrive/d
これを利用すれば Cygwin のフォルダ外でも作業が可能となります。しかし、毎回移動するのは面倒でしょう。 Cygwin 外でしか作業しないとわかっていれば .bashrc の設定を使うと良いでしょう。
gcc した際に問題があった場合はエラーメッセージが表示されます。これは多くの種類があるので一概には言えませんが対処の基本は圧倒的な数が出ても気にせずに上の行にあるエラーから潰していくことです。
いかに具体例を示します。
$ gcc 09C2.c
09C2.c: In function ‘getline1’:
09C2.c:9:5: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘if’
09C2.c:9:11: error: ‘buffer’ undeclared (first use in this function)
09C2.c:9:11: note: each undeclared identifier is reported only once for each function it appears in
09C2.c:14:5: error: expected ‘;’ before ‘return’
出力二行目に 09C2.c:9:5:
とあります。これは 09C2.c というファイルの 9 行目の 5
文字目に問題があるという意味になります。これを見たら指定された箇所とその周囲を見て問題を探せば良いのです。その後の expected
‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘if’
も参考になります。
時にたくさんのエラーが出ますが、ひとつの記述ミスから 3, 4 つのエラーが出ることやその記述ミスで後の問題ない部分に影響してエラーとして出るケースも多々あります。たくさんのエラーが出てもそれほど慌てる必要はありません。
.bashrc は Cygwin が起動した直後に実行されるファイルです。この末尾にコマンドを書き加えておけば起動直後に実行されます。適当なテキストエディタを開いて編集してみるとよいでしょう。
ただし、現状では使い道は最初に閲覧するフォルダを d ドライブに変更する等といったことしかありません。その場合は.bashrc の末尾に以下のように記述します。
cd /cygdrive/d
プログラミングの流れを下の図に書きました。
先に出した例で言えば「Hello Cygwin!
と表示したい」と思った上でそれをプログラミングします。結果としてプログラム言語で書かれた
hello.c が作られました。しかし、hello.c
はこのままでは実行できません。これをパソコンにとって実行できる
(理解できる) exe
ファイルに翻訳する必要があります。その翻訳をコンパイルと呼びます。
また、プログラム言語のままで動かすことの可能なスクリプト言語というものも存在します。この授業を担当なさっている Martin 先生は Ruby というスクリプト言語を推してます。Cygwin のインストール時に導入が可能なので興味があれば是非導入し、試してみてください。
k-tanaka.net 内の UNIX コマンド等といった資料が役に立つでしょう。特に便利なコマンドを以下に列挙します。
コマンドとは異なりますがリダイレクトも便利です。プログラムへの入力・プログラムへの出力をファイルなどから実施できます。下の例では
a.exe
への入力を
input.txt
から行い、出力を output.txt
に保存しています。
$ ./a < input.txt > output.txt