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 を使用した場合の結果と比較しないとなんともいえなそうだ。