Just one point. When you run the disk simulator with your code, a run copy of the actual disk is created and all actions of your code are done on the run copy.
Only when you exit your run time environment, the data you have written to the disk actually gets committed to the actual disk from the run copy. This is done by the finalizer (destructor) of the class disk.cpp during exit (~disk() function).
However, xfs-interface always works with the actual disk and doesn't look at the run copy.
Hence, if your program creates a relation, it is created only on the run copy. If you concurrently run xfs-interface, you won't see the disk update. as the run copy is still alive and not committed to the actual disk.
(The converse also holds true; while you are running your dbms run-time system, any update done using xfs-interface won't show up in the run copy.)
Finally, if your program does not terminate gracefully (using the EXIT command of the front-end interface), the finalizer ~disk() may not run, thus the run copy may not get committed back to the actual disk, and all your updates could be lost.