プログラミング 演 習 Ⅰ 第 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 ファイル 名 & ( 例 えば$ geditprogram.c&) または アプリケーション アクセサリ gedit テキストエディタ 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) inti,j,k; for (i=1;i<100;i++) j=i++;... インデントあり int main(void) inti,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.cshrc (vii) コピーしたファイルの 先 頭 だけ 表 示 してみる $ head csh.cshrc (viii) コピーしたファイルの 最 後 だけ 表 示 してみる $ tail csh.cshrc (ix) コピーしたファイルの 名 前 を 変 えてみる $ mv csh.cshrc csh.cshrc2 (x) 新 しいディレクトリを 作 ってみる $ mkdir test (xi) 新 しいディレクトリにファイルを 移 動 してみる コピーされたか 確 認 する $ mv csh.cshrc2 test $ ls test (xii) ディレクトリごと 新 しいディレクトリにコピーしてみる コピーされたか 確 認 する $ cp r test test2 $ ls test2 (xiii) 新 しいディレクトリ 内 に 移 動 してみる ディレクトリ 内 に 入 ったことを 確 認 す る $ cd test2 $ pwd プログラミング 演 習 第 2 回 5
(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) 教 科 書 p23 の 数 値 を 出 力 するプログラム p 29 の 数 値 定 数 の 確 認 p. 32 のエスケー プシーケンスの 確 認 も 入 力 して samp3.c, samp4.c, samp5.c として 保 存 し コ ンパイルし エラーがないこと あれば 修 正 してエラーが 内 容 にする 実 行 してみ よ 予 想 どおりの 表 示 か? (3) 情 報 倫 理 まだ 情 報 倫 理 の 学 習 を 終 了 していない 人 は 終 了 すること 本 日 もレポートはありません 6. 来 週 の 予 習 教 科 書 ( 明 快 入 門 C)の 第 3 章 と 4 章 を 読 んでおくこと プログラミング 演 習 第 2 回 6