unsigned int, вероятно, не является 16-битной архитектурой вашего компьютера.Если вы хотите быть уверенным, используйте вместо этого uint16_t.
uint16_t rand;
int ret = read(myFile, &rand, sizeof(rand)) ;
Я думаю, что вы путали возвращаемое значение read (ret, которое должно быть int и это число прочитанных байтов) и сгенерированное случайное число (randэто должно быть uint16_t и является генерируемым случайным числом).