FILE (ab)use FILE is an opaque object: stdio interface depends only on the pointer copying FILE is explicitly implementation defined behaviour DragonFly slightly violates ISO C99: FILE is incomplete catches many abuses (misc/screen for example) stdin, stdout and stderr can be implemented in different ways NetBSD has FILE foo[3], stdin == &foo[0] DragonFly has FILE *stdin => invalid for file scope assignments