The Royals went into the match mathematically safe from relegation due to Millwall's defeat yesterday, but they missed the chance to climb up to 18th in the table as their winless run in the league extended to seven games.
Birmingham did threaten again at the other end before the half was out, with Federici needing to make a save from Jonathan Grounds after he had risen highest in the box to nod a corner goalwards.
Reading began the second half on the front foot, but chances were few and far between at either end of the field until Chalobah's powerful effort from 25 yards was kept out by Randolph with 15 minutes remaining.
Birmingham introduced Demarai Gray in an attempt to break the deadlock, and the youngster almost had an immediate impact when he drew a fine stop from the leg of Federici.
There was nothing the Reading keeper could do about the opening goal seven minutes from time, however, as Donaldson nodded home from inside the box to break the deadlock.
Donaldson threatened again late on, but this time Federici made the save as Birmingham ran out 1-0 winners to climb up to 13th place.