> while((n = fread(buf, 1, sizeof(buf), fp)) != sizeof(buf))
> if(fwrite(buf, 1, n, out) != n)
> sysfatal("write failed");fread is buffered, or similar to readn, and does all it can, hence the difference from plain read
