ファイルをコピーする最短コード…とは?

 学校のプログラミングでまだ一回もショートコードを出していない。初回は「printf("Hello world!");」だと思って「HELLO」の形状にコードを加工しておいた (AAみたいに) のだが微妙に違って出せなかった。残念。
 さて、次週のレポート課題は「input.txt」を「output.txt」にコピーするプログラムだ。次週提出分が今学期最終レポートの筈なので是非ショートコードを提出してみたい。と言う訳でこのプログラムの最短コードは何バイトだろうか。もちろん言語はCで。ショートコーダーじゃない私は大した技巧は使えなかった。と言う訳で途中経過を示す (伸びちゃうので改行済みですが我慢して下さい)。

/* 候補1 (98bytes ぐらい) */
main(b,w){int*r=fopen("input.txt","r");
for(w=fopen("output.txt","w");(b=fgetc(r))>-1;fputc(b,w));}
/* 候補2 (105bytes ぐらい) */
#define f(n,m) fopen(#n"put.txt",#m)
main(b,w){int*r=f(in,r);for(w=f(out,w);(b=fgetc(r))>-1;fputc(b,w));}
/* いまいちな候補3 (42bytes ぐらい…だが…) */
main(){system("cp input.txt output.txt");}

 FILE* を無理やり char** や int* にしてるのがちょい微妙?候補2の方が気に入ってるのだが長いのが残念。次学期のプログラミングを免除されるような素晴らしい変態コードを思いついた方は是非教えて下さい。そして、来週のレポートの最後にこっそり添付させて下さいw

★ 00:13 追記

/* 候補1+ (97bytes ぐらい) */
main(b,w){int*r=fopen("input.txt","r");
for(w=fopen("output.txt","w");(b=fgetc(r))+1;fputc(b,w));}
/* 候補2+ (104bytes ぐらい) */
#define f(n,m) fopen(#n"put.txt",#m)
main(b,w){int*r=f(in,r);for(w=f(out,w);(b=fgetc(r))+1;fputc(b,w));}

 早速追記。for の条件部を変更。EOF が -1 じゃなかったら沈没 (候補1,候補2もですが) しちゃうけどw