Shammer's Philosophy

My private adversaria

fopen-w

20090610 のブログで fopen の w+ 時の動作を確認してみたがよくわからなかったので、fopen を w モードで実行してみた。結果は同じように見える。

#include <stdio.h>
#include <stdlib.h>

int main(void){
    FILE *fp;
    char s[1024];

    if(( fp = fopen("xxxxx.txt", "w")) == NULL ){
	perror(NULL);
	exit(EXIT_FAILURE);
    }

    while( fgets(s, 1024, fp) != NULL ){
	printf("%s", s);
    }

    fprintf(fp, "%s", "YYYYYYYYYYY\n");

    fclose(fp);

    return 0;
}

実行結果は以下。

$ rm xxxxx.txt 
$ gcc fopen-w.c
$ ./a.out 
$ ./a.out 
$ ls
a.out		fopen-r+.c	fopen-w+.c	fopen-w.c	xxxxx.txt
$ cat xxxxx.txt 
YYYYYYYYYYY
$ gcc fopen-r+.c 
$ ./a.out 
YYYYYYYYYYY
$ ./a.out 
YYYYYYYYYYY
YYYYYYYYYYY
$

r+ のときの動作と比較してみたが、読み込みは行われていないように見える。
今回試したのは w なので、読み込みできないとしてもそれは想定通りだが、w+ だったら読み込めて r+ のようになるのでは?いや、毎回ファイルを新規作成するから表示される YYYYYYYYYY は1行でも正常なのか。
w+ は使うシーンあまりないかもしれない。最初にファイルの内容を表示、その後でもともとの内容をクリアして同名のファイルを新規作成する、みたいな場合か。