1999年度のプログラミングIIIの授業は終りました。 この授業のページは参照用の資料として保存しているものです。最新の情報・資料は江上の授業ページで。 |
ファイルを操作する命令を作る |
以下はテキスト(p.212)の「ファイル削除」の例題である(若干の修正を加えている)。このプログラムは実行後、scanf( )により入力されたファイル名を remove( ) により削除するものである。
#include <stdio.h> int main(void)
{
char a[50];printf("\n");
printf("削除するファイル名 = ");
scanf("%s", a);if ( remove(a) == 0 )
printf("削除しました\n");
else
printf("削除できませんでした\n");
}
・・・ところで、Unix には rm というファイルを削除するコマンドがある。プログラムがこれと同じような働きをするようにさらに修正を加えてみよう。
rm というコマンドはコマンドライン引数を取得し、該当するファイルを消去する。たとえば、
bash$ rm a.out
とコマンド入力すると a.out というファイルがあれば、それが削除される。
コマンドライン引数を取得する方法はすでに学習している。
#include <stdio.h> int main(int argc, char *argv[ ])
{
if ( remove( argv[1] ) == 0 )
printf("削除しました\n");
else
printf("削除できませんでした\n");
}
このままではコマンドライン引数(削除するファイル名)が与えられなかった場合が不安なので、エラー処理を加えてプログラムを完成させる。
#include <stdio.h> int main(int argc, char *argv[ ])
{
if (argc != 2) {
printf("削除するファイルを指定してください\n");
} else {
if ( remove( argv[1] ) == 0 )
printf("削除しました\n");
else
printf("削除できませんでした\n");
}
}
上記のファイルを my_rm.c として編集・保存した。早速使用してみると、
bash$ cc my_rm.c
bash$ a.out <-- コマンドライン引数無し
削除するファイルを指定してください <-- エラー処理が働く
bash$
bash$ a.out a.out <-- a.out を削除してみる
削除しました <-- 削除された
bash$
bash$ ls a.out
a.out not found <-- リストをとってもファイルは無い
bash$
と、期待通り動作しているのがわかる。
同じような手法を用いてテキスト(p.213)の「ファイル名の変更」の例題に修正を加えて、Unix の mv コマンドと同じ働きをするプログラムを作成してみましょう。
[Q] うまくいったらさらにファイルをコピーするコマンド cp と同じ働きのプログラムを作成してみましょう。