rename()
rename() はファイル名を変更する。
int rename(char *旧ファイル名, char *新ファイル名);
成功すると 0 を返し、エラーが発生すると 0 以外の値を返す。
#include
#include
int main(int argc, char *argv[])
{
    if (rename(argv[1], argv[2])) {
        printf("Error.\n");
        exit(1);
    } else {
        printf("Renamed successfully.\n");
    }
    return 0;
}
takatoh@nightschool $ ls *.txt myfile.txt takatoh@nightschool $ ./sample_9_7a myfile.txt yourfile.txt Renamed successfully. takatoh@nightschool $ ls *.txt yourfile.txt
remove()
remove() はファイルを削除する。
int remove(char *ファイル名);
成功すると 0 を返し、エラーが発生すると 0 以外の値を返す。
#include
#include
int main(int argc, char *argv[])
{
    if (rename(argv[1], argv[2])) {
        printf("Error.\n");
        exit(1);
    } else {
        printf("Renamed successfully.\n");
    }
    return 0;
}
takatoh@nightschool $ ls *.txt yourfile.txt takatoh@nightschool $ ./sample_9_7b yourfile.txt Remove successfully. takatoh@nightschool $ ls *.txt ls: *.txt にアクセスできません: そのようなファイルやディレクトリはありません
rewind()
rewind() はストリームの現在位置を先頭に巻き戻す。
void rewind(FILE *ストリーム);
rewind() に戻り値はない。開くことが出来たファイルはすべて巻き戻すこともできるから。
次のプログラムは、ファイルの内容を表示したあと、先頭まで巻き戻してもう一度表示する。
#include
#include
int main(int argc, char *argv[])
{
    FILE *fp;
    if (argc != 2) {
        printf("Filename not given.\n");
        exit(1);
    }
    if ((fp = fopen(argv[1], "r")) == NULL) {
        printf("Cannot open file: %s\n", argv[1]);
        exit(1);
    }
    /* display file contents */
    while (!feof(fp)) {
        putchar(getc(fp));
    }
    /* rewind */
    rewind(fp);
    /* display once more */
    while (!feof(fp)) {
        putchar(getc(fp));
    }
    fclose(fp);
    return 0;
}
takatoh@nightschool $ ./sample_9_7c myfile Hello I'm takatoh How are you? �Hello I'm takatoh How are you? �takatoh@nightschool $
なんかファイルの最後に変な文字が出力されてるな。何だろ?
[追記]
上の「変な文字」にいついてコメントで教えてもらった。詳しくはコメントを見て欲しいけど、要するに getc() が返した EOF を出力している、てことみたいだ。
次のように getc() の戻り値をチェックするように変更したらでなくなった。
#include
#include
int main(int argc, char *argv[])
{
    FILE *fp;
    char ch;
    if (argc != 2) {
        printf("Filename not given.\n");
        exit(1);
    }
    if ((fp = fopen(argv[1], "r")) == NULL) {
        printf("Cannot open file: %s\n", argv[1]);
        exit(1);
    }
    /* display file contents */
    while (!feof(fp)) {
        ch = getc(fp);
        if (ch == EOF) {
            break;
        }
        putchar(ch);
    }
    /* rewind */
    rewind(fp);
    /* display once more */
    while (!feof(fp)) {
        ch = getc(fp);
        if (ch == EOF) {
            break;
        }
        putchar(ch);
    }
    fclose(fp);
    return 0;
}
takatoh@nightschool $ ./sample_9_7d myfile Hello I'm takatoh How are you? Hello I'm takatoh How are you?
ファイルの最後の文字を読み込んだ時点ではまだ「ファイルの終端に逹っした」ということになっていません。 ファイルの最後の文字を越えて読込もうとした段階でフラグが ON になり feof が真を返すようになります。 つまり、この事例では EOF (-1) を putchar してしまい、一文字分だけ余計な出力になってしまうのです。