プログラミング演習 Ⅰ 第 2 回 UNIX 入門 ( ファイルの操作 ) C 言語入門の入門今日の目標 :UNIX の基本コマンドの使用 最初の C プログラムをエディタで書く 1. 分らなければすぐ調べる UNIX コマンドで分らないことがあればすぐ調べられる ( オンラインマニュアル man) 日本語か英語のマニュアル 先週を思いだしてログインし 端末を起動する 端末に以下を入力 $ man コマンド名 [Enter キー ] 例 : man man [Enter] (man コマンドのマニュアル ) 例 : man ls [Enter] ( ファイルリストコマンド ls のマニュアル ) 2. UNIX 基本コマンド (i) ディレクトリ操作ディレクトリ :Windows のフォルダと同等 pwd: 現在のディレクトリ表示 ( カレントディレクトリと呼ぶ ) cd 移動するディレクトリ先 : ディレクトリを移動する 例 :$ cd /etc[enter] ディレクトリ /etc に移動 $ cd ~[Enter] ホームディレクトリ (~, チルダ ) に移動 mkdir 新ディレクトリ名 : 現在のディレクトリの下にディレクトリを作る (ii) rmdir ディレクトリ名 : 指定ディレクトリを削除する ( 使用注意!) 参考 :~ 以外に知っておくと便利なディレクトリ指定. ( ピリオド一つ ): 現在のディレクトリ.. ( ピリオド二つ ): 現在のディレクトリの一階層上のディレクトリファイル操作 ls: 現在のディレクトリにあるファイルのリスト表示 cp 複写元ファイル名新ファイル名 : 指定ファイルをコピーする ( ディレクトリも可 ) mv 移動元ファイル名新ファイル名 : 指定ファイルを移動する ( ディレクトリも可 ) rm ファイル名 : ファイルを削除 ( 使用注意!) cat ファイル名 : ファイルの内容を全て表示 ( テキストファイルを指定のこと!) less ファイル名 : ファイルの内容を一画面ずつ表示 ( 前後移動可能 ) head ファイル名 : ファイルの内容の先頭表示 tail ファイル名 : ファイルの内容の最後尾表示 プログラミング演習第 2 回 1
(iii) プリンタ操作 lpr ファイル名 : ファイルをプリンタ出力する ( テキストファイルを指定のこと!) 例 :$ lpr samp1.c[enter] % x pages were outputted. 注意 : 日本語は文字化けする エディタからプリントすれば OK( 後述 ) lpq: プリンタの状態表示例 :$ lpq[enter] EIBPR02 は準備ができていますランク所有者ジョブファイル合計サイズ 1st kkondo 21 samp1.c 1024 バイト cancel プリンタジョブ名 : プリントジョブをキャンセルする例 :$ cancel 21 使用可能なプリンタ 8-107( 大部屋 ):eibpr01 8-104( 小部屋 ):eibpr02 何も指定しなければ 8-107 のプリンタに出力されるログオン時表示されるポイント枚数しかプリントできないので 無駄にしないように! gedit から直接ソースをプリントできる プリンタを選べる (iv) プロセスの管理 w[enter]: ログインしているユーザの表示 例 :$ w 11:57:32 稼働 11 日間, 16:59, 3 ユーザ, 負荷平均率 : 1.98, 1.97, 1.91 ユーザ端末場所ログイン @ 待機 JCPU PCPU 現プロセス名 katoh pts/0 kat.yz.yamagata- 08 年 3 月 01 日 6 日間 0.50 秒 0.50 秒 tcsh kkondo pts/1 133.24.109.10 水 19 日 6:08 分 18.05 秒 0.21 秒 bash kkondo pts/2 enkkondo.dgw.yz. 11 時 52 分 0.00 秒 0.04 秒 0.00 秒 w ps: 動作プロセス名表示例 :$ ps t pts/1 ( 端末 pts/1 で動作しているプロセスの ) PID TTY TIME CMD 5157 pts/1 00:00:00 bash 5183 pts/1 00:00:01 kwrite kill: プロセスの強制終了 ( 使用注意! 自分のプロセスしか終了できない ) 例 :$ kill 9 5183 (kwrite の強制終了 ) (v) その他知っておきたい操作 [Ctrl]+c(Ctrl キーと c のキーを同時に押す ): 停止 [Ctrl]+z: プロセスのサスペンド ( 一時停止 ) [Ctrl]+s: 画面表示出力を一時停止 [Ctrl]+q: 画面表示出力を再開 3. エディタ Ubuntu Linux には emacs vim など各種エディタが付属しているが gedit テキストエデ ィタがお勧め プログラミング演習第 2 回 2
$ gedit ファイル名 & ( 例えば $ gedit program.c &) またはアプリケーション アクセサリ テキストエディタ C 言語の編集には以下を設定しておくと便利 編集 設定表示タブで 行番号を表示 と 対応するカッコを強調表示 にチェックエディタのタブで 自動インデントを有効にする にチェック 表示 ハイライトモード C を選んで 選択 ボタン英語と日本語入力してみよ 日本語と英語の切り替えは [Ctrl]+[Space]([Ctrl] キーとスペースを同時に押す ) または [ 半角 / 全角 ] キーで行う 4. C 言語入門 ( 教科書 1 章 2 章 ) (1) 特徴 (i) 標準的なプログラム言語 あらゆる場面で活躍 : 組み込みプログラム ( 携帯 家電 ) ゲーム ビジネスソフトなど IC の設計 ハードの設計なども C 言語をベースとした開発言語 UNIX などの OS も C 言語 (ii) メモリや入出力のかなり細かい操作ができる 逆にメモリ管理は自分で行う必要 バグ ( プログラムミス ) 多し! (iii) 関数の集合体として記述プログラムの実行は一連の関数の実行として実現 (iv) 豊富な演算 データ型 (2) プログラム記述時の注意 (i) 基本的に小文字で書く 大文字を使う時は慣習がある 慣習を守らないと他人が見にくいソースになる (ii) 基本的に一行に一文 (iii) インデント ( 字下げ ) を使う 徐々に慣れて行こう と } の間 ( ブロックという ) を 1 段階 ( タブを使うとよい ) 下げる 例 : インデントなし int main(void) int i,j,k; for (i=1;i<100;i++) j=i++;... インデントあり int main(void) int i,j,k; for (i=1;i<100;i++) j = i++; プログラミング演習第 2 回 3
}... http://www.eie.yz.yamagata-u.ac.jp/~kkondo/programming1/memo/1. html を参考にせよ (iv) コメントをたくさん付ける 自分でも忘れる /* と */ で囲むとコメントになる文法の解説ではなく, 処理の内容 ( 概要 ) を述べよ http://www.eie.yz.yamagata-u.ac.jp/~kkondo/programming1/m emo/2.html を参考にせよ (v) コメント内 文字列内以外は全て半角英数字で記述全角文字 特に全角スペースがコメントと文字列以外に入るとエラーになるので注意 (vi) その他 見やすいソースのコツはたくさん 少しずつ慣れよう (3) ソースファイル ( プログラムを記述したテキストファイル ) を保存したら コンパイルして実行ファイル ( 実行できるファイル ) に変換する ( 教科書 p.8) $ gcc Wall o 実行ファイル名ソースファイル名例 :gcc Wall o printname.exe printname.c gcc: Ubuntu で使う標準的な C 言語コンパイラ -Wall: 全ての警告 注意を出力 より正しい文法 -o 実行ファイル名 : 実行ファイル名指定 ( ファイル名.exe としましょう ) ソースファイル名 : ファイル名.c としましょう ファイル名には特殊文字 (/.,~ スペースなど ) 日本語 ( 可能だが トラブルの元 ) 内容を表さないもの ( 単に a.c や program.c など 何のプログラムか分らない ) は避けよう (4) コンパイルした実行ファイルを実行してみる ( 教科書 p.9) (3) で作成した実行ファイルをコンソールで実行してみる 実行ファイルがあるディレクトリも指定しなくてはならない 現在のディレクトリ ( カレントディレクトリ ) に実行ファイルがある場合は これを./ を先頭につけて明示する 例 : $./printname.exe[enter] 5. 本日の演習 (1) UNIX コマンドの演習 (i) ログインし コンソールを起動する (ii) 現在設定されているディレクトリを表示する $ pwd[enter] プログラミング演習第 2 回 4
(iii) 現在のディレクトリのファイルを表示する $ ls [Enter] $ ls l[enter] 表示はどう違う? (iv) ファイルをコピーしてみる $ cp /etc/csh.cshrc [Space].( ピリオド )[Enter] (/etc ディレクトリにある csh.cshrc というファイルを現在のディレクトリにコピーする ) (v) コピーしたファイルを全部表示してみる $ cat csh.cshrc (vi) コピーしたファイルを 1 ページずつ表示してみる $ less csh.cshrc ( あまり大きなファイルではないので 1 ページに収まってしまうかもしれない そのときはもっと大きなファイルを表示 例えば $ less /usr/include/stdio.h (vii) ファイルの先頭だけ表示してみる $ head csh.cshrc $ head /usr/include/stdio.h (viii) ファイルの最後だけ表示してみる $ tail csh.cshrc $ tail /usr/include/stdio.h (ix) コピーしたファイルの名前を変えてみる $ mv csh.cshrc csh.cshrc2 (x) 新しいディレクトリを作ってみる $ mkdir test (xi) 新しいディレクトリにファイルを移動してみる コピーされたか確認する $ mv csh.cshrc2 test $ ls test (xii) ディレクトリごと新しいディレクトリにコピーしてみる コピーされたか確認する $ cp r test test2 $ ls test2 (xiii) 新しいディレクトリ内に移動してみる ディレクトリ内に入ったことを確認する プログラミング演習第 2 回 5
$ cd test2 $ pwd (xiv) 一下位層上のディレクトリに戻る 戻ったことを確認する $ cd.. $ pwd (xv) 作ったディレクトリを両方削除する 削除を確認する $ rm r test $ rm r test2 $ ls (xvi) 現在ログインしているユーザを確認する $ w (xvii) 現在自分が走らせているプロセスを確認する (xvi) の操作で自分の端末確認しておいてください ) $ ps t 端末名 以上を 2 回繰り返し 確実に操作を身につけておくこと (2) C 言語基礎の演習 (i) 教科書 p10 のプログラム例 1を gedit を使って入力し samp1.c として保存する (ii) コンパイルする エラーがあれば p10-12 を参考にエラー個所を直す (iii) 実行して Hello! と出力されるのを確認する (iv) samp1.c を変更して 自分の名前を出力してみよう 英語と日本語両方で出力するように改造してみよ samp1j.c として保存 コンパイルし 実行してみよう (v) 教科書 p20 の2つめのプログラムをインデントを忠実に再現して入力し samp2.c として保存 コンパイルして実行せよ これは何を計算しているプログラムか? (vi) 教科書 p 23 の数値を出力するプログラム p 29 の数値定数の確認 p. 32 のエスケープシーケンスの確認も入力して samp3.c, samp4.c, samp5.c として保存し コンパイルし エラーがないこと あれば修正してエラーが内容にする 実行してみよ 予想どおりの表示か? (3) 情報倫理まだ情報倫理の学習を終了していない人は終了すること 本日もレポートはありません 6. 来週の予習 教科書 ( 明快入門 C) の第 3 章と 4 章を読んでおくこと プログラミング演習第 2 回 6