Использовать текстовое представление?
char buf[32] ;
snprintf(buf,sizeof buf,"%f",ret_val);
write(fd,buf,strlen(buf));
Вы можете прочитать эту строку и снова проанализировать ее с помощью sscanf. (Возможно, даже сделайте так, чтобы строка была завершена - "% f \ n" - чтобы вы знали, когда закончится число.)
Прямой подход - просто
write(fd,&ret_val,sizeof ret_val);
В обоих случаях вы должны проверить возвращаемое значение write и предпринять надлежащие действия в случае возникновения ошибки, или write () записал меньше байтов, чем вы сказали.