"BUGS: MD5 digests have been demonstrated to not be unique."
What a goofy comment ... no message digest is unique. The problem with MD5 is that collisions can be generated on current hardware ... but this is not a bug in the library, and should not be characterized as such.
[It seems that no one ever looks at these comments, which might explain why the D documentation is such poor quality.]
It might make sense to use either std.file for the input data, as in cast(byte) read(fname), or one of the stream classes; the use of FILE* suggests that this is still normal D usage. std.file would produce the simplest example code, std.stream might demonstrate the md5 functionality better (multiple data blocks.)
See the corresponding page in the D Specification: DigitalMars:d/phobos/std_md5.html