Linux講座にようこそ。このページは「C言語プログラミング入門 - 第14章.ライブラリ関数 - 入出力ライブラリ」です。
ここで紹介する関数はファイルやディレクトリ(フォルダ)の削除と名称変更を行いますが、次のような前提条件があります。
remove関数はファイルやディレクトリを削除します。
形式 | #include <stdio.h> int remove(const char *pathname); |
---|---|
返り値 | 正常に処理ができた場合は0を返します。エラーの場合は-1を返します。 |
引数 |
|
rename関数はファイルやディレクトリの名称(パス名)を変更します。
形式 | #include <stdio.h> int rename(const char *oldpath, const char *newpath); |
---|---|
返り値 | 正常に処理ができた場合は0を返します。エラーの場合は-1を返します。 |
引数 |
|
使用法、 他 |
第2引数のnewpathの指定場所により、意味合いが多少変わります。第1引数のoldpathと同じ場所の場合は、名前の変更になりますし、異なる場所の場合は移動になります。 |
実行時引数で指定されたファイルまたは、ディレクトリの名称を変更します。実行時引数の第1引数が変更前のパス名で、第2引数が変更後のパス名です。
$ ls -l ./t* -rw-r--r-- 1 merry merry 48 2008-10-16 11:14 ./temp_1.txt $ $ ./ex14_1_13.prg ./temp_1.txt ./temp.txt ← 名前の変更 ./temp_1.txtを./temp.txtにリネームします。よろしいですか ==> y 正常終了。 $ ls -l ./t* -rw-r--r-- 1 merry merry 48 2008-10-16 11:14 ./temp.txt $ $ $ ls -l ~/TMP/log.csv -rw-rw-r-- 1 merry merry 32869 2009-03-19 16:52 /home/merry/TMP/log.csv $ $ ./ex14_1_13.prg ~/TMP/log.csv ./my_log.csv ← 移動 /home/merry/TMP/log.csvを./my_log.csvにリネームします。よろしいですか ==> y 正常終了。 $ ls -l ~/TMP/log.csv ls: cannot access /home/merry/TMP/log.csv: そのようなファイルやディレクトリはありません $ ls -l ./my* -rw-rw-r-- 1 merry merry 32869 2009-03-19 16:52 ./my_log.csv $ $ ls -ld ./DATA* drwxr-xr-x 2 merry merry 4096 2008-08-10 11:06 ./DATA_BK $ $ ./ex14_1_13.prg ./DATA_BK ./DATA ← ディレクトリ名の変更 ./DATA_BKを./DATAにリネームします。よろしいですか ==> y 正常終了。 $ ls -ld ./DATA* drwxr-xr-x 2 merry merry 4096 2008-08-10 11:06 ./DATA $
一時的に使用するユニークな名称(パス名)のファイルが必要な場合は、ここでご紹介する関数を使ってファイルを生成するとよいでしょう。ただし、tmpnam関数は名称を生成した時と実際に使用する間に、同じ名称のものが使われてしまう可能性があり、これは重大なセキュリティ上の問題になる可能性がありますので、なるべく使わない方がよいでしょう。
tmpfile関数はユニークな名称(パス名)の一時ファイルを作成します。作成したファイルはクローズ時または、プログラム終了時に自動的に削除されます。なお、ファイルはバイナリ・更新モード(w+b)でオープンしますので、Windows系OSでバイナリファイルを取り扱う場合も使用できます。
形式 | #include <stdio.h> FILE *tmpfile(void); |
---|---|
返り値 | 正常に処理ができた場合は作成したファイルのファイルポインタを返します。ファイルが作成できなかったり、オープン出来なかった場合はNULLを返します。 |
引数 | なし。 |
tmpnam関数は一時ファイルの名前(パス名)を生成します。パス名を生成するだけで実際のファイルは作りません。(この関数の使用はできるだけ避けた方がよいでしょう)
形式 | #include <stdio.h> char *tmpnam(char *s); |
---|---|
返り値 | 正常に処理ができた場合は生成したパス名を返します。エラーの場合はNULLを返します。 |
引数 |
|
実行時引数で指定された複数のファイルを連結して行番号を付加して表示します。1回の実行で同じ内容を複数回表示することができます。
$ cat /etc/issue Fedora release 10 (Cambridge) Kernel \r on an \m (\l) $ cat ./temp.txt Hello. Bye. $ $ ./ex14_1_14.prg /etc/issue ./temp.txt ##### 行番を付加して表示します。 ##### 001 : Fedora release 10 (Cambridge) 002 : Kernel \r on an \m (\l) 003 : 004 : Hello. 005 : Bye. 表示終了。再度表示しますか(y/n) ==> y 001 : Fedora release 10 (Cambridge) 002 : Kernel \r on an \m (\l) 003 : 004 : Hello. 005 : Bye. 表示終了。再度表示しますか(y/n) ==> n $