Shammer's Philosophy

My private adversaria

fopen-w+

fopen-r+ に続いて書いてみた。w+ の場合、エラーになることはないが常に上書きしてしまう。
これを使って何かの処理を書いて、消したくないデータを(バグで)消してしまうってことはありそうだ。
w と 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;
}

実行結果は以下。

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

うーん、よくわからない。至って普通に見える。そもそも、ただの w で開いた際の動きを知らないからだ。
ただの w を使用した場合の結果と比較しないとなんともいえなそうだ。