わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

ソースファイルが,消えた?

先日のプログラミング授業で,ある学生にプログラムの再打ち込みを指示する事態になりました.
経緯は:
1. Linux Mintで,端末とテキストエディタを起動し,Cのプログラムを作って動かすという授業です.

2. 学生はおのおの,こちらで用意したCのファイルを打ち込んで保存し,コンパイル・実行します.(説明の都合上,ファイル名をexample.cとします.)
3. このプログラムは,scanf関数により,数値を1つ受け取ります.
4. 学生が手を挙げたので,近づいて話を聞くと,「端末が使えない」とのこと.
5. 適当に数値(とEnterキー)を打ってもらったものの,計算結果は表示されません.
6. 「プログラムを終了させましょう.Ctrlキーを押しながら,Cを押してください」と指示し,学生はそのとおりにしました.
7. すると,テキストエディタ(gedit)が画面から消滅しました.


学生は,資料の記載どおりに,「gedit example.c」というコマンドを,端末で実行していました.
端末と別にウィンドウを開いて動かすとき,「gedit example.c &」のように,末尾に「&」をつけるのが,コマンド実行の基本です.
じつは資料でも,これより前に,geditを「&」つきで起動する指示を,入れていました.
「&」のない「gedit example.c」は,すでにgeditが動いているときの,実行方法です.
こうすると,すでに動いているgeditの上で,example.cを編集するための,新たなタブが作られます.
それが済むと,実行した「gedit example.c」は,終了します.
端末(シェル)ではプロンプトが表示され,次のコマンド実行が,できるようになります.
ですが,その学生の状況は,違っていました.
前のファイルを編集したあと,geditを終了させていました.
それから,「gedit example.c」を実行しました.
新たにgeditのウィンドウが作られ,端末は,その実行終了を待つ状態に,なっていました.
一方,こちらは,example.cをコンパイルしてできたa.outを実行中だと,勘違いしていました.
数値入力では何も起こらず,Ctrl+Cを打ってもらったところ…
「&」なしで実行した「gedit example.c」のコマンド,そして画面上のgeditが,終了したという次第です.
学生が打ち込んだexample.cは,消滅の直前にちらっと見えましたが,資料どおりの内容で,これからコンパイルしようとするところでした.
端末では,コマンドプロンプトが出ていない行に,「cc example.c」と,表示されていました.
さらに都合の悪いことに,gedit上で保存をしていなかったため,example.cのファイルが作られていませんでした.(emacsだと,#example.c#といったファイルができるのですが.)
六日の菖蒲,十日の菊…
覆水盆に返らず…
どうしようもありません.再打ち込みを指示しました.


計算機を使うと,ひとつの操作で,ファイルが,あるいは重要なデータが,消滅してしまうことがあります.
これから何をすべきかの前に,これまで何をしてきたか,きちんと確認することの必要性を実感させられた,授業中の出来事でした.