E>Ну, а как же прочитать в буфер размером 64Кб, что равно 65535 ??
На самом деле 64Кб — это 65536, не так ли? То есть ты можешь считать на два байта меньше, чем тебе надо

Грустно, не правда?

64Кб ты возможно сможешь считать, если будешь использовать fread.
Она описана так:
size_t fread(
void *buffer,
size_t size,
size_t count,
FILE *stream
);
Если sizeof(size_t) равен 4 (т.е. size_t — это long), то ты сможешь это сделать. Если же равен 2, то тогда с ее помощью ты считаешь на один байт больше — 65535 байт.

Это легко проверить — printf("%d", sizeof(size_t));
Если бы ты писал под Win, то там само собой int четырехбайтный, а вот под дос...