_ProgII2007/0928
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[takataka]] | [[ProgII2007]]
*Prog2 2007 実習 9月28日(金) [#d8d77674]
#contents
*今日の課題その一 UNIXユーザの基礎知識の復習(2) [#hefe6b2f]
以下の説明をよく読んで実際に操作してみなさい.
**カレントディレクトリの移動(前回の復習+α) [#lcf9b501]
+コンソールを開き,カレントディレクトリのファイル一覧を表示しなさい(ファイル一覧のコマンドは何?).
+前回作ったディレクトリ prog2 が存在することを確認し,prog2 の下の ex0921 へ移動しなさい(どうやって移動する?).
+カレントディレクトリを確認しなさい(カレントディレクトリを表示するコマンドは?)
+次のようにするとどこへ移動するか試してみなさい(移動した後でカレントディレクトリを確認).
#pre{{
$ cd ← cd の後に何も指定しない
}}
ディレクトリを指定しないでcdするとホームディレクトリ(説明は後で出てきます)へ移動します.
**ファイルの中身を見る less [#z6cb6c8e]
+もう一度 prog2/ex0921 (prog2の下のex0921)へ移動し,次のようにしてみなさい.
#pre{{
$ less hoge.c
}}
lessというのは,ファイルの中身を見るコマンドです.内容を確認するだけで書き換えたりしないつもりのときは,emacsなどのエディタをわざわざ立ち上げるよりも楽でしょう.スペースキーやカーソルキーでスクロールさせられます.終了するときは,'q'('Q'の小文字).
+他のファイルの中身も見てみなさい.
**ファイルのコピー cp/名称変更 mv/削除 rm (1)[#sef19bb7]
***一つのディレクトリ内でのファイルのコピー,名称変更,削除 [#ie2a33e6]
+ファイルをコピーするには cp コマンドを使います.ex0921にいる状態で次を実行してみなさい.
#pre{{
$ cp hoge.c funya.c
}}
lsすると,新しくfunya.cというファイルができています.lessで中身を見ると,hoge.cと同じであることがわかります.
+ファイル名を変更するには mv コマンドを使います.
#pre{{
$ mv funya.c honya.c
}}
こうすると,いままで funya.c という名前だったものが honya.c に変わります.
+cpやmvのファイル名の順番を間違えたり,新しく作る方に既に存在しているファイル名を指定してしまったりしないように気をつけましょう.みなさんの環境では,上書きしようとしたら確認メッセージを出してくれますが,環境によってはいきなり上書きして大切なファイルをなくしてしまうかもしれません.ちなみに,「古い方」→「新しい方」の順番と考えると,cpもmvもファイル名の指定の順序は同じです.
+ファイルを削除するには rm コマンドを使います.
#pre{{
$ rm honya.c
}}
これまたうっかり大切なファイルを消してしまわないよう気をつけましょう.
**ディレクトリの階層構造とパス [#tabe53b7]
この実習で使っているLinuxのようなUNIX系OSでは,ファイルやディレクトリを
#pre{{
/hoge/fuga/funya.c
}}
のように表現します.このような表現のことを「''パス''」といいます.例えば上記の例は,「ルートディレクトリ(/)の下のhogeというディレクトリの下のfugaというディレクトリの下にあるfunya.cというファイル」を表しています.''ルートディレクトリ(root directory)''というのは,全てのディレクトリの大元のディレクトリです(rootとは英語で根っこの意味).
pwdコマンドは,''カレントディレクトリ''(現在いるディレクトリ)のパスを表示してくれます.例えば,前回つくった prog2 ディレクトリの下にいる場合,pwdが表示するパスは
#pre{{
/home/t010000/prog2
}}
となるでしょう(t010000は,実際にはあなたの学籍番号).これは,「カレントディレクトリは,ルート(/)の下のhomeの下のt010000の下のprog2である」ことを表しています.
また,コンソールを開いた直後や,ディレクトリを指定せずにcdコマンドを実行した場合,カレントディレクトリは
#pre{{
/home/t010000
}}
のようになっているでしょう.このディレクトリのことは,''ホームディレクトリ''と呼びます.
+prog2ディレクトリの下に ex0928 というディレクトリを作りなさい(ディレクトリを作るコマンドは?それをどこにいる状態で実行する?).
+ex0928に移動しなさい.
+そこで次のようにするとどこに移動するか確認しなさい.
#pre{{
$ cd ../ex0921
}}
この"../ex0921"というのは,「カレントディレクトリから一つ上がった場所(..)の下にあるex0921というディレクトリ」というように,移動先を現在地からの「相対的」な関係で表現したものになっています.このようなパスの表現を,「''相対パス''」といいます.それに対して,上で説明したような,ルートディレクトリ(/)からはじまるパスは,ファイルやディレクトリの絶対的な位置を表しているので,「''絶対パス''」と言います.
+cdコマンドで絶対パスを指定すれば,どこからでも指定の場所に移動できます.いくつかの場所に移動してから以下のように実行して,どこからでもex0921に移動できることを確認しなさい.
#pre{{
$ cd /home/t010000/prog2/ex0921
}}
+lsコマンドは,パスを指定して実行することで,カレントディレクトリとは別の場所の情報を表示することができます.ex0921で次のようにするとどうなるか確認しなさい.
#pre{{
$ ls ..
$ ls ../..
}}
**ファイルのコピー cp/名称変更 mv/削除 rm (2)[#sef19bb7]
***異なるディレクトリ間でのファイルのコピー,名称変更,削除 [#ie2a33e6]
+上記のcdやlsの例と同様に,cp,mv,rmのようなコマンドもパス名を指定して実行することができます.ex0928に移動して,次のようにしてみましょう.
#pre{{
$ cp ../ex0921/hoge.c fuga.c
}}
こうすると,ex0921の下のhoge.cというファイルを,カレントディレクトリにfuga.cという名前でコピーすることができます.
+次は,ex0921に移動して,次のようにしてみましょう.
#pre{{
$ cp hoge.c ../ex0928/honya.c
}}
こうすると,カレントディレクトリにあるhoge.cというファイルを,隣のex0928というディレクトリにhonya.cという名前でコピーすることができます.
+cpコマンドでは,コピー元にファイルを指定して,コピー先にディレクトリを指定すると,コピー元のファイルをコピー先のディレクトリ内に同じ名前にしてコピーしてくれます.
例えば,ex0921にいる状態で次のように実行すると,ex0928にもhoge.cができます.
#pre{{
$ cp hoge.c ../ex0928/
}}
また,ex0928にいる状態で次のように実行することでも,同じことができます(上記を実行した後では既にhoge.cが存在しているので,上書きしてよいかと聞かれるでしょう).
#pre{{
$ cp ../ex0921/hoge.c . ← スペース空けてピリオド一つ
}}
ピリオド一つはカレントディレクトリを表し,二つはその上を表します.
mvやrmでも同様のことができますが,省略します.
*今日の課題その二 関数の復習 [#u9d1bea1]
以下の課題は全て(発展課題は除く),実習時間中にできなかった場合には次回講義までに宿題としてやっておくこと.
**関数とポインタ(1) [#uc8f3c48]
[[前回のチェックテスト>ProgII2007/check0921]]のQ9のプログラムを実際に作成して実行し,なぜそういう結果になるのか考えなさい.ソースファイル名は好きにつけて構わない.ただし,ex0928ディレクトリ内に作成すること.
**関数と配列(1) [#e0f2bfe1]
講義資料のソース5のプログラムを作成して実行し,なぜそういう結果になるのか考えなさい.ソースファイル名は好きにつけて構わない.ただし,ex0928ディレクトリ内に作成すること.
**関数と配列(2) [#sum]
上記のプログラムをコピーして,次のように改造しなさい.
ソースファイル名は好きにつけて構わない.ただし,ex0928ディレクトリ内に作成すること.
-関数 hoge() と同様に,int型の配列とint型の変数(配列の要素数を表す)を引数とし,int型の値を返す関数 sum() を定義する
-関数 sum() は,渡された配列の要素の和を求め,その値を返す
-main()中で hoge() を呼んだ後に sum() を呼び,返された値を printf() で表示する
**''発展課題''(余裕がある人向け) [#v4a8098b]
[[ポインタの話>http://tortoise1.math.ryukoku.ac.jp/~takataka/course2004/doc/pointer/]]を読んで理解を深めましょう.演習問題は「まにあ篇」までありまっせ.
*チェックテスト [#j518929b]
[[今日のチェックテスト>ProgII2007/check0928]]
終了行:
[[takataka]] | [[ProgII2007]]
*Prog2 2007 実習 9月28日(金) [#d8d77674]
#contents
*今日の課題その一 UNIXユーザの基礎知識の復習(2) [#hefe6b2f]
以下の説明をよく読んで実際に操作してみなさい.
**カレントディレクトリの移動(前回の復習+α) [#lcf9b501]
+コンソールを開き,カレントディレクトリのファイル一覧を表示しなさい(ファイル一覧のコマンドは何?).
+前回作ったディレクトリ prog2 が存在することを確認し,prog2 の下の ex0921 へ移動しなさい(どうやって移動する?).
+カレントディレクトリを確認しなさい(カレントディレクトリを表示するコマンドは?)
+次のようにするとどこへ移動するか試してみなさい(移動した後でカレントディレクトリを確認).
#pre{{
$ cd ← cd の後に何も指定しない
}}
ディレクトリを指定しないでcdするとホームディレクトリ(説明は後で出てきます)へ移動します.
**ファイルの中身を見る less [#z6cb6c8e]
+もう一度 prog2/ex0921 (prog2の下のex0921)へ移動し,次のようにしてみなさい.
#pre{{
$ less hoge.c
}}
lessというのは,ファイルの中身を見るコマンドです.内容を確認するだけで書き換えたりしないつもりのときは,emacsなどのエディタをわざわざ立ち上げるよりも楽でしょう.スペースキーやカーソルキーでスクロールさせられます.終了するときは,'q'('Q'の小文字).
+他のファイルの中身も見てみなさい.
**ファイルのコピー cp/名称変更 mv/削除 rm (1)[#sef19bb7]
***一つのディレクトリ内でのファイルのコピー,名称変更,削除 [#ie2a33e6]
+ファイルをコピーするには cp コマンドを使います.ex0921にいる状態で次を実行してみなさい.
#pre{{
$ cp hoge.c funya.c
}}
lsすると,新しくfunya.cというファイルができています.lessで中身を見ると,hoge.cと同じであることがわかります.
+ファイル名を変更するには mv コマンドを使います.
#pre{{
$ mv funya.c honya.c
}}
こうすると,いままで funya.c という名前だったものが honya.c に変わります.
+cpやmvのファイル名の順番を間違えたり,新しく作る方に既に存在しているファイル名を指定してしまったりしないように気をつけましょう.みなさんの環境では,上書きしようとしたら確認メッセージを出してくれますが,環境によってはいきなり上書きして大切なファイルをなくしてしまうかもしれません.ちなみに,「古い方」→「新しい方」の順番と考えると,cpもmvもファイル名の指定の順序は同じです.
+ファイルを削除するには rm コマンドを使います.
#pre{{
$ rm honya.c
}}
これまたうっかり大切なファイルを消してしまわないよう気をつけましょう.
**ディレクトリの階層構造とパス [#tabe53b7]
この実習で使っているLinuxのようなUNIX系OSでは,ファイルやディレクトリを
#pre{{
/hoge/fuga/funya.c
}}
のように表現します.このような表現のことを「''パス''」といいます.例えば上記の例は,「ルートディレクトリ(/)の下のhogeというディレクトリの下のfugaというディレクトリの下にあるfunya.cというファイル」を表しています.''ルートディレクトリ(root directory)''というのは,全てのディレクトリの大元のディレクトリです(rootとは英語で根っこの意味).
pwdコマンドは,''カレントディレクトリ''(現在いるディレクトリ)のパスを表示してくれます.例えば,前回つくった prog2 ディレクトリの下にいる場合,pwdが表示するパスは
#pre{{
/home/t010000/prog2
}}
となるでしょう(t010000は,実際にはあなたの学籍番号).これは,「カレントディレクトリは,ルート(/)の下のhomeの下のt010000の下のprog2である」ことを表しています.
また,コンソールを開いた直後や,ディレクトリを指定せずにcdコマンドを実行した場合,カレントディレクトリは
#pre{{
/home/t010000
}}
のようになっているでしょう.このディレクトリのことは,''ホームディレクトリ''と呼びます.
+prog2ディレクトリの下に ex0928 というディレクトリを作りなさい(ディレクトリを作るコマンドは?それをどこにいる状態で実行する?).
+ex0928に移動しなさい.
+そこで次のようにするとどこに移動するか確認しなさい.
#pre{{
$ cd ../ex0921
}}
この"../ex0921"というのは,「カレントディレクトリから一つ上がった場所(..)の下にあるex0921というディレクトリ」というように,移動先を現在地からの「相対的」な関係で表現したものになっています.このようなパスの表現を,「''相対パス''」といいます.それに対して,上で説明したような,ルートディレクトリ(/)からはじまるパスは,ファイルやディレクトリの絶対的な位置を表しているので,「''絶対パス''」と言います.
+cdコマンドで絶対パスを指定すれば,どこからでも指定の場所に移動できます.いくつかの場所に移動してから以下のように実行して,どこからでもex0921に移動できることを確認しなさい.
#pre{{
$ cd /home/t010000/prog2/ex0921
}}
+lsコマンドは,パスを指定して実行することで,カレントディレクトリとは別の場所の情報を表示することができます.ex0921で次のようにするとどうなるか確認しなさい.
#pre{{
$ ls ..
$ ls ../..
}}
**ファイルのコピー cp/名称変更 mv/削除 rm (2)[#sef19bb7]
***異なるディレクトリ間でのファイルのコピー,名称変更,削除 [#ie2a33e6]
+上記のcdやlsの例と同様に,cp,mv,rmのようなコマンドもパス名を指定して実行することができます.ex0928に移動して,次のようにしてみましょう.
#pre{{
$ cp ../ex0921/hoge.c fuga.c
}}
こうすると,ex0921の下のhoge.cというファイルを,カレントディレクトリにfuga.cという名前でコピーすることができます.
+次は,ex0921に移動して,次のようにしてみましょう.
#pre{{
$ cp hoge.c ../ex0928/honya.c
}}
こうすると,カレントディレクトリにあるhoge.cというファイルを,隣のex0928というディレクトリにhonya.cという名前でコピーすることができます.
+cpコマンドでは,コピー元にファイルを指定して,コピー先にディレクトリを指定すると,コピー元のファイルをコピー先のディレクトリ内に同じ名前にしてコピーしてくれます.
例えば,ex0921にいる状態で次のように実行すると,ex0928にもhoge.cができます.
#pre{{
$ cp hoge.c ../ex0928/
}}
また,ex0928にいる状態で次のように実行することでも,同じことができます(上記を実行した後では既にhoge.cが存在しているので,上書きしてよいかと聞かれるでしょう).
#pre{{
$ cp ../ex0921/hoge.c . ← スペース空けてピリオド一つ
}}
ピリオド一つはカレントディレクトリを表し,二つはその上を表します.
mvやrmでも同様のことができますが,省略します.
*今日の課題その二 関数の復習 [#u9d1bea1]
以下の課題は全て(発展課題は除く),実習時間中にできなかった場合には次回講義までに宿題としてやっておくこと.
**関数とポインタ(1) [#uc8f3c48]
[[前回のチェックテスト>ProgII2007/check0921]]のQ9のプログラムを実際に作成して実行し,なぜそういう結果になるのか考えなさい.ソースファイル名は好きにつけて構わない.ただし,ex0928ディレクトリ内に作成すること.
**関数と配列(1) [#e0f2bfe1]
講義資料のソース5のプログラムを作成して実行し,なぜそういう結果になるのか考えなさい.ソースファイル名は好きにつけて構わない.ただし,ex0928ディレクトリ内に作成すること.
**関数と配列(2) [#sum]
上記のプログラムをコピーして,次のように改造しなさい.
ソースファイル名は好きにつけて構わない.ただし,ex0928ディレクトリ内に作成すること.
-関数 hoge() と同様に,int型の配列とint型の変数(配列の要素数を表す)を引数とし,int型の値を返す関数 sum() を定義する
-関数 sum() は,渡された配列の要素の和を求め,その値を返す
-main()中で hoge() を呼んだ後に sum() を呼び,返された値を printf() で表示する
**''発展課題''(余裕がある人向け) [#v4a8098b]
[[ポインタの話>http://tortoise1.math.ryukoku.ac.jp/~takataka/course2004/doc/pointer/]]を読んで理解を深めましょう.演習問題は「まにあ篇」までありまっせ.
*チェックテスト [#j518929b]
[[今日のチェックテスト>ProgII2007/check0928]]
ページ名: