One issue with your code is the open options for REAL_RDS; you should OR together flags ("|") not and them.

Actually, in this case you don't want to have O_NDELAY/O_NONBLOCK - this will just munch CPU. Data only ever turns up in 8-byte blocks, so your 8 byte read/write should be ok. Note also that errors return <0, not necessarily -1 in linux.

Do you see any message on the serial port when the player starts? The player just does an open("/dev/rds0",O_RDONLY) and prints that message if the open fails. This is no different to what it does when opening /dev/ir.

Hugo